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&&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);
           }
           
        }


    }
慕仙森
浏览 815回答 4
4回答

千万里不及你

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

Helenr

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

喵喵时光机

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

相关分类

Java