我正在用Java做项目。因为我有一个部分,我必须在程序中识别单个,多个注释和总评论。我需要你的指导来计算java中的单行注释,多行注释和总无注释行。
答案 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中的字符串(双引号内)的情况,其中包含以引号括起来的双引号(如“/ \”/“)作为代码行,而是它将其视为评论。这仍然需要解决。
以下是解释: -
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();
}
}
}