`
duanhengbin
  • 浏览: 384685 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用正则表达式高效统计代码

 
阅读更多

最近一直在搞正则相关的东西,利用空闲时间,改善了下原来项目里比较笨拙的统计代码行数程序。

 

思路:采用倒推计算的方法,即先删除空行,再删除注释行,每一步之前都统计下剩余的行数,最后再来算 空白行,注释行,和有效代码行。之所以这样考虑有两个原因:一是,多行注释的行数确认比较麻烦,删除后再算可以简化处理。二是JAVA的正则API缺少计数的功能,直接计数肯定要用循环,而且用很多次,比较麻烦。

 

... 以上为文件读入代码(略)
String separator = "\r\n";
//strFile 为将文件读入字符串
int iCntAll = countMatches(strFile,separator);
//删除空行
strFile = strFile.replaceAll("(?m)^\\s*$"+separator, "");
int iCntNoSpace = countMatches(strFile,separator);
//删除单行注释(注释前有代码的不计)
strFile = strFile.replaceAll("(?m)^\\s*//.*$"+separator, "");
//删除多行注释
//strFile = strFile.replaceAll("(?sm)^\\s*/\\*.*?\\*/\\s*$"+separator, "");
// 10/31修订,在统计一份反编译代码时发现,多行注释后有代码时将发生匹配错误
// 试过几种修补方式未果,改用两次简单的替换来解决
strFile = strFile.replaceAll("(?s)/\\*.*?\\*/", "").replaceAll("(?m)^\\s*$"+separator, "");
int iCntOnlySrc = countMatches(strFile,"\r\n");
int[] linesCnt = new int[3];
//计算空白行 的行数
linesCnt[0] = iCntAll - iCntNoSpace;
//计算注释行 的行数
linesCnt[1] = iCntNoSpace - iCntOnlySrc;
//计算代码行 的行数(总行数-空白行-注释行)
linesCnt[2] = iCntOnlySrc;
... 以下代码略

 

countMatches()函数:该函数通过统计回车换行的个数来获取行数。

public static int countMatches(CharSequence str, CharSequence sub) {
    int count = 0;
    int idx = 0;
    while ((idx = str.toString().indexOf(sub.toString(), idx)) != -1) {
        count++;
        idx += sub.length();
    }
    return count;
}

 上面是所有的关键代码,是不是很清爽。稍加修改还可比较容易地适用于其他各种语言的代码统计。

 附件中包含完整代码。 

 

10月29日更新:改进了报告格式,增加了总行数/百分比的统计。

 试了几个开源库:

spring-framework-3.2.4.RELEASE

空行数 注释行数 代码行数
55293 199712 197342
12% 44% 44%

  

Google guava common (ver:15.0 不含测试用代码):

空行数 注释行数 代码行数
13881 46960 65113
11% 37% 52%

 

 jodd (ver:3.4.8)

空行数 注释行数 代码行数
17015 31728  68312
15% 27% 58%

 

 看来注释方面 SPRING 的开发者还是更加细致。

分享到:
评论

相关推荐

    使用Java正则表达式分析处理日志

    在提供的两个示例类中,可能会展示具体的日志处理代码,包括正则表达式的使用和处理逻辑。通过阅读这些示例,可以更深入地了解如何将上述理论应用于实际项目。 总的来说,Java正则表达式是处理日志的强大工具,它能...

    NLP正则表达式分析程序

    在这个基于Java的NLP正则表达式分析程序中,开发者利用了NetBeans作为集成开发环境(IDE)来构建这样一个工具,以帮助用户对自然语言文本进行高效且精准的处理。 正则表达式是一种模式匹配工具,它允许用一种简洁的...

    asp.net(c#)正则表达式测试工具

    这款工具能够帮助程序员高效地验证正则表达式的正确性,并自动提取匹配到的分组值。 正则表达式,简称regex,是一种模式匹配语言,用于在文本中查找、替换或捕获符合特定规则的字符串。在.NET框架中,`System.Text....

    几个常用的经典正则表达式

    在日常开发工作中,正则表达式是一种非常实用且强大的工具,它可以帮助我们高效地完成字符串的搜索、替换等操作。下面将详细介绍几个经典的正则表达式及其应用场景。 #### 1. 匹配中文字符 **正则表达式**: `[\u4...

    正则表达式入门经典 参考资料 学习

    - **文本搜索与替换**:在文档编辑器中使用正则表达式可以高效地查找和替换特定格式的文本。 - **数据验证**:例如验证电子邮件地址、电话号码是否符合常见的格式规范。 - **数据提取**:从非结构化文本中抽取有用的...

    行业分类-设备装置-分解和合并正则表达式.zip

    - 日志分析:通过正则表达式提取设备的日志信息,如错误代码、时间戳等。 - 配置文件解析:在设备配置文件中查找或替换特定设置,以批量更新设备状态。 - 数据验证:确保输入的数据符合设备装置的要求,如检查MAC...

    正则表达式详细说明说明

    ### 正则表达式详细说明 正则表达式是一种强大的文本模式匹配工具,在字符串处理、表单验证等场景中有着广泛的应用。通过一系列特殊的字符序列...因此,在使用正则表达式时,还需要结合具体情况进行适当的调整和优化。

    asp.net正则表达式

    在ASP.NET这样的Web开发框架中,正则表达式能够帮助开发者高效地处理各种文本数据,比如验证用户输入的数据格式是否正确、提取网页中的特定内容等。 #### 二、正则表达式示例及应用场景 ##### 1. 匹配中文字符 **...

    js中的正则表达式入门(大量实例代码).docx

    **注意**:使用字面量方式创建正则表达式时,如果`pattern`中包含变量,则需要使用反斜杠转义,而构造函数方式可以直接使用变量。 #### 三、正则表达式的常用标志 1. **i**:忽略大小写匹配。 2. **m**:多行匹配...

    文本三剑客之grep及正则表达式 -.pdf

    - **定义**:`grep` 是 Linux 和 Unix 系统中的一种强大的文本搜索工具,它能够使用正则表达式来搜索文本,并将匹配的行打印出来。其全称是 Global Regular Expression Print,意为全局正则表达式版本。 - **功能**...

    常用的正则表达式用法

    以上列举了一些常用的正则表达式及其应用场景,这些表达式可以帮助开发者高效地处理各种文本数据。正则表达式的学习和实践是一个持续的过程,随着经验的积累,开发者可以编写出更加复杂和精确的正则表达式来满足不同...

    正则表达式

    在处理大量文本数据时,可以通过正则表达式来统计某些模式出现的次数。例如,统计一个字符串中数字出现的次数: ```java String content = "123 abc 456 def"; Pattern pattern = Pattern.compile("\\d+"); Matcher...

    Java正则表达式使用

    在本文中,我们将重点讨论如何在Java中使用正则表达式来抓取网页中的电子邮件地址以及进行代码统计。 首先,让我们来看一下如何抓取网页中的Email地址。在Java中,我们可以使用`java.util.regex`包中的`Pattern`和`...

    js限制文本框只能输入数字(正则表达式).docx

    2. **性能优化**:对于高频率的用户输入操作,频繁调用正则表达式可能会带来一定的性能开销,可以考虑使用更高效的算法来优化处理过程。 3. **国际化支持**:考虑到不同地区对于数字的表示方式可能存在差异(如部分...

    Delphi正则表达式应用[文].pdf

    在这个示例中,我们使用了带有捕获组的正则表达式`(\w+) (\d+)`。当匹配成功时,`MatchedExpression`属性包含了整个匹配到的字符串,而`SubExpressions`数组则存储了每个捕获组匹配到的部分。`SubExpressions[0]`...

    正则表达式11

    掌握正则表达式不仅能够帮助我们在文本处理中高效地查找和替换信息,还能在编程语言中实现复杂的数据过滤和验证。对于开发人员来说,正则表达式是日常工作中不可或缺的技能之一,尤其是在Web开发、数据分析和文本...

    JAVA中正则表达式

    此外,它也可以用于统计代码行,例如在Java中,可以使用正则表达式来查找特定类型的文件并统计代码行数。 总的来说,正则表达式是程序员的重要工具,掌握了正则表达式的使用,能够更高效地处理字符串,提高编程的...

    易语言使用正则取逗号个数

    总之,易语言的正则表达式功能为我们提供了强大的文本处理能力,通过学习和掌握正则表达式的使用,可以极大地提升我们的编程效率和代码质量。无论是初学者还是经验丰富的开发者,都应该重视并熟练掌握这一技能。

Global site tag (gtag.js) - Google Analytics