最近一直在搞正则相关的东西,利用空闲时间,改善了下原来项目里比较笨拙的统计代码行数程序。
思路:采用倒推计算的方法,即先删除空行,再删除注释行,每一步之前都统计下剩余的行数,最后再来算 空白行,注释行,和有效代码行。之所以这样考虑有两个原因:一是,多行注释的行数确认比较麻烦,删除后再算可以简化处理。二是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 的开发者还是更加细致。
相关推荐
内容概要:教程从基础的Python编程知识入手,逐步介绍了如何使用Python中的正则表达式、collections模块等工具进行高效的词频统计。同时,针对中文文本的处理,教程还引入了jieba分词库,使得中文词频统计变得简单易...
实例076 使用正则表达式验证一年的12个月份 92 实例077 使用正则表达式验证一个月的31天 93 实例078 使用正则表达式验证数字输入 94 实例079 使用正则表达式验证密码长度 95 实例080 使用正则表达式验证非零的正整数...
虽然使用正则表达式可以准确的抽取某一固定格式的页面,但面对形形色色的HTML,使用规则处理难免捉襟见肘。能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围内通用,这是一个直接关系上层应用的...
增加后台自定义流量统计代码和在线客服代码的添删改6.分离网站配置和核心配置7.修正采集版块,实现按列表批量采集,增强精确度,和下载远程图片到本地8.增减各板块添加信息时验证,防止出现空信息9.完善正则表达式...
5.增加后台自定义流量统计代码和在线客服代码的添删改 6.分离网站配置和核心配置 7.修正采集版块,实现按列表批量采集,增强精确度,和下载远程图片到本地 8.增减各板块添加信息时验证,防止出现空信息 9.完善...
.net中的正则表达式使用高级技巧 (一) C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET...