为了账号安全,请及时绑定邮箱和手机立即绑定

Java统计文件注释个数和注释字符数

Java统计文件注释个数和注释字符数

慕仙森 2019-02-20 21:17:20
我把文件一行一行地存入到了动态数组 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&&note3==-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&&note3!=-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); } } }
查看完整描述

4 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

把list.remove(j)改成list.set(j,"")即可

查看完整回答
反对 回复 2019-03-01
?
Helenr

TA贡献1780条经验 获得超4个赞

用正则表达式的方法太粗陋了,我觉得你可以试一下StreamTokenizer,可以自动解析注释、字符串等

查看完整回答
反对 回复 2019-03-01
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

你这个对与逻辑不是很清晰:
应该是这样:
字符串首先trim,去除前后空格
先判断/**
如果是,记录多行状态为true,累加注释个数
在此期间的//忽略,累加注释字符数
再判断*/,如果是,记录多行状态为false,
判断//,如果是,记录//到字符串尾的字符数.累加注释字符数,累加注释个数
还有,我在枚举中喜欢 /* 注释 / 这样考虑,你也要注意下.

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 814 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号