Java统计文件注释个数和注释字符数
我把文件一行一行地存入到了动态数组 list中,然后删除list里面的注释和输出语句。其中countNote是算注释个数的,charInNote是算注释的总字符数的。可是最后得到的list存在很多问题,有大佬能帮我改一下代码吗
这是测试文件String.java
注释总个数应该有156个
注释总的字符数应该有 88469个
public void operateNote(ArrayList<String> list) throws Exception{
String s = null;
for(int j=0;j<list.size();j++) {
s=list.get(j);
int note1=s.indexOf("/*");
int note2=s.indexOf("//");
int note3=s.indexOf("*/");
//int note4=s.indexOf("\"");
String dm="\"(.*)\"";//双引号
String sm="\'(.*)\'";//单引号
if(note1!=-1&¬e3==-1) {//多行注释
countNote++;
String ttt=list.get(j);
list.set(j, ttt.substring(0, note1));
charInNote+=s.substring(note1).length()+1;//+1是包括换行符
s=list.get(++j);
while((note3=s.indexOf("*/"))==-1) {
if((note2=s.indexOf("//"))!=-1) {
countNote++;
}
list.remove(j);
charInNote+=s.length()+1;
if(j<list.size()-1) {
s=list.get(++j);
}else {
break;
}
}
list.remove(j);
charInNote+=s.length();
}else if(note2!=-1) {// "//"类的单行注释
countNote++;
list.set(j, s.substring(0,note2));
charInNote+=s.substring(note2).length()+1;
}else if(note1!=-1&¬e3!=-1) {//单行注释
countNote++;
String m1=s.substring(0, note1);
String m2=s.substring(note3+2);
String m3=m1+m2;
charInNote+=s.substring(note1, note3+2).length();
list.set(j, m3);
}else {//删除输出语句
String rp=list.get(j);
rp=rp.replaceAll(dm, "");
list.set(j, rp);
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
把list.remove(j)改成list.set(j,"")即可
统计代码行数有很多现成的轮子
cloc -- Count Lines of Code
如果你用linux,可以类似的方式安装
在我的某个项目下执行cloc得到的结果
如果你写这个程序仅是为了练手,还是自己想办法完善才能练出来,大佬们忙打怪呢
用正则表达式的方法太粗陋了,我觉得你可以试一下StreamTokenizer,可以自动解析注释、字符串等
你这个对与逻辑不是很清晰:
应该是这样:
字符串首先trim,去除前后空格
先判断/**
如果是,记录多行状态为true,累加注释个数
在此期间的//忽略,累加注释字符数
再判断*/,如果是,记录多行状态为false,
判断//,如果是,记录//到字符串尾的字符数.累加注释字符数,累加注释个数
还有,我在枚举中喜欢 /* 注释 / 这样考虑,你也要注意下.