计算几个方法的行,但返回单独的值而不是所有

时间:2016-02-15 05:58:07

标签: java counter bufferedreader loc

我要详细说明我的问题,因为我很难以正确的方式标记问题。

我在这样标记我的方法:

 /*Start*/
  public void contadorDeLineas(File file)throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
/*Finish*/

我有几个标记为这样的方法,但我想分别计算它们,但是我写的代码计算方法中的行从公共开始并在#34;完成"中完成。但是现在我编写的代码计算方法中的所有行并返回所有行的总和。我想要做的是读取第一个块返回该值并继续搜索下一个代码块。 这是我写的代码

public void LinesMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int lines_inside = 0;

while((line = br.readLine())!=null){
  if(line.startsWith("/*St")){
    do{
      line = br.readLine();
      line = line.trim();
      System.out.println(line);
      if(!(line.equals("") || line.startsWith("/*"))){
        lines_inside++;
      }
    }while(!line.startsWith("/*Fi"));
  }
}
br.close();
System.out.println("Found: " + lines_inside);
}

这是我的代码在控制台中显示的示例

/*Start*/
public void LineMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
/*Finish*/
/*Start*/
public static void main(String[] args)throws IOException{
program2 test = new program2();
File root = new File(args[0]);
test.LOC(root);
System.out.println("Found: " + test.lines);
System.out.println("Other type of lines: " + test.toDo);
}
}
/*Finish*/
Block comments lines: 11

相反,我正在寻找一个结果,就像第一个打印显示数字3,然后是数字8。 任何指导将不胜感激。

3 个答案:

答案 0 :(得分:1)

试试这个

    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        boolean inside = false;
        int count = 0;
        String line;
        while ((line = br.readLine()) != null) {
            if (line.contains("/*Start*/")) {
                inside = true;
                count = 0;
            } else if (line.contains("/*Finish*/")) {
                System.out.println("Found: " + count);
                inside = false;
            } else if (inside) {
                ++count;
            }
        }
        if (inside && count > 0)
            System.out.println("Found: " + count);
    }

答案 1 :(得分:1)

如果您有多种方法打印出来,那么当您只对行数感兴趣时,所有行可能会很多。您可以将方法的名称和行数放在地图中并打印出来。

public static void LinesMethods(File file)throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
    int lines_inside = 0;

    Map<String, Integer> map = new HashMap<>();

    while((line = br.readLine())!=null){
        lines_inside = 0;
      if(line.startsWith("/*St")){
          String method = "";
        do{
          line = br.readLine();

          if(line.contains("public")){
              method = line.substring(0, ine.indexOf('('));                  
          }

          line = line.trim();

          if(!(line.equals("") || line.startsWith("/*"))){
            lines_inside++;
          }
        }while(!line.startsWith("/*Fi"));
        map.put(method, lines_inside);
      }
    }
    br.close();
    for(String s :map.keySet()){
        System.out.println(s +" : "+ map.get(s));
    }
}

答案 2 :(得分:0)

尝试将find ${source} -name '*.gz' -print0 | while read -d '' -r gz; do gzip -dc "$gz" > ${target}/$(basename "$gz" .gz) mv "$gz" ${archive}/ done 放入代码中,如下所示:

lines_inside++;

这为您提供了文件中最少数量的元素。