如何计算java中的注释(单行和多行)?

时间:2011-03-12 14:50:26

标签: java comments

我正在用Java做项目。因为我有一个部分,我必须在程序中识别单个,多个注释和总评论。我需要你的指导来计算java中的单行注释,多行注释和总无注释行。

8 个答案:

答案 0 :(得分:3)

如果您只需要关于评论和代码的行数摘要,请查看CLOC。将它指向源目录,即:

cloc src

...它会为您显示摘要。

CLOC还处理了自己难以解决问题的极端案例 - 多行注释,在字符串中查看行内容等等。以下内容:

package test;

public class Main {

/**
 * A javadoc comment.
 * @param args
 */
public static void main(String[] args) {
    System.out.println("/* This isn't a comment */");
    /* This is a comment */
    //Comment
    System.out.println("//Not comment");
}
//Comment
}

CLOC提供2个空行,7个注释行和7个代码行。

是的,你可以用Java自己写一些东西但除非这是一个特定的家庭作业问题(在这种情况下它应该被标记为这样)为什么要重新发明轮子?你需要处理很多极端情况,做大量的测试以确保它有效,将它与现有的工具进行比较等等。当你已经有了完成这项工作的东西时,这样做真的没有意义。

答案 1 :(得分:2)

这是我为同一个问题所做的作业的链接。希望这会有所帮助。

注意:它不完整,因为它不包括java中的字符串(双引号内)的情况,其中包含以引号括起来的双引号(如“/ \”/“)作为代码行,而是它将其视为评论。这仍然需要解决。

http://bit.ly/PDasu9

以下是解释: -

Note :- This program is not optimized for performance, performance is not an attribute i care about here. I chose not to use Pattern.compile() among many other decisions.

I count the empty lines, comment lines and lines of code separately.

if there is any sentence which has a some tabs or just spaces, they are counted as
empty lines. They match with the regular expression \s*
\s - any whitespace character (\n\t\b)
 * - this means there can be any number of whitespace characters


comment lines are the ones that match any of the following conditions :-
1) have a // outside of a string
2) have a /* some comment */
3) have a /* but the '*/' is not found on the same line

The regular expression for the above can be found inside the code!

Lines of code are the ones that end in ')' , '}' , '{' or ';' (one problem with this approach is that it does not count lines that have code followed by comment as a line of code)

The summary of these three types of lines are provided by this program.

答案 2 :(得分:0)

答案 3 :(得分:0)

在Java中您有两种类型的注释:

// - 行评论

/ * * / - 阻止评论。

基于此,您可以做出简单的假设:

  
      
  • 如果在行中存在“//”,那么此行只有一条评论。

  •   
  • 如果在行中存在“/ *”,则已打开注释块。

  •   
  • 如果评论栏已打开(找到),请搜索结束标记“* /”。

  •   

所以你的任务是检查文件中的每一行是否有这些假设。

答案 4 :(得分:0)

//Below is the working code 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CountComment {

    public static void main(String[] args) {
        String line="";
        int count=0;
        try {
            BufferedReader br=new BufferedReader(new FileReader("./src/numbers/comment.txt"));
                while((line=br.readLine())!=null)
                {
                    if(line.startsWith("//"))
                        count++;
                    if(line.startsWith("/*"))
                    {
                        count++;
                        while(!(line=br.readLine()).endsWith("'*\'"))
                        {
                        count++;
                        break;
                        }
                    }

                }
                br.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
             catch (IOException e) {
                e.printStackTrace();
            }

        System.out.println("count="+count);
        } 


    }

答案 5 :(得分:0)

对于我的一个课程作业,我写了一个简单的java代码来完成这个任务。 https://github.com/chetanpawar0989/CommentAnalysis

之前我创建了这个文件,但最近我添加到了github。 该程序在一个文件上逐行运行。它在运行时 filename.java

上需要一个imput参数

例如,要运行此程序:java CommentAnalysis filename.java

它统计单行(//)以及多行注释(/ * ... * /)。

我试图涵盖this file中提到的不同评论方案。

我还在自述文件中写了关于我的实现的假设,但根据个人要求改变它们并不困难。请检查一下,如果我在这里遗漏任何评论情况,请告诉我。

答案 6 :(得分:0)

我尝试过,效果很好。使用下面的代码,您将必须检查每一行:

                if (isEmpty(s) || s.IndexOf("\"//\"") != -1 || s.IndexOf("\"/*\"") != -1|| s.IndexOf("\"*/\"") != -1) continue;
                if (s.IndexOf("/*") != -1) checkCML = true;
                if (s.IndexOf("*/") != -1) checkCML = false;

                if (s.IndexOf("/*") != -1 && s.IndexOf("*/") != -1) ++commentLine;

                if (s.IndexOf("//") != -1 || checkCML) ++commentLine;

答案 7 :(得分:0)

对我有用。它计算Java文件中单行和多行注释的总数。

public class CountComment {

    public static void main(String[] args) throws IOException {
        try {
            String str;
            BufferedReader f = new BufferedReader(new FileReader("a.java"));
            LineNumberReader l = new LineNumberReader(f);
            int numberline = 0;
            int count = 0;
            while ((str = l.readLine()) != null) {
                numberline++;
                if (str.startsWith("/*")) {
                    while ((str = l.readLine()) != null) {
                        count++;
                        if (str.endsWith("*/")) {
                            count++;
                            break;
                        }
                    }
                }
                else if(str.startsWith("//")){
                    count++;
                }
            }
            System.out.println("" + count);
        } catch (FileNotFoundException e) {
            System.out.println("file not found");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}