【发布时间】:2016-03-01 23:33:56
【问题描述】:
如何忽略以"/*" 开头并以结尾的注释语句
"*/" 例如:/*the problem is..*/ 或
/* problem is very difficult */ ,,我想在逐行读取java文件时删除这些语句
public class filename1 {
public static void main (String args[])
{
try {
fileName = "C:\\NetBeansProjects\\filename\\src\\filename\\filename.java";
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
line = br.readLine();
while (line !=null) {
for( int i=0;i<line.length();i++)
{
b=line.indexOf("/",i);
ee=line.indexOf("*",i);
if(b!=-1 && ee!=-1)
v=line.indexOf("*/",i);
if (v==-1)
line=" ";
}
System.out.println(line);
line = br.readLine();
}}
catch (IOException e)
{
e.printStackTrace();
}
}
}
【问题讨论】:
-
从根本上说,不要指望能够用这个小代码编写一个有效的 Java 解析器。例如,考虑包含
/*的字符串文字。或多次包含它的行... -
除非你真的想自己写解析器,尽量使用现有的Java源码解析器库:stackoverflow.com/questions/1967987/…
-
你没有抓住重点。如果要准确删除 cmets,则必须处理几个非显而易见的场景,例如多行命令、包含字符串
/*的 cmets 以及包含/*的 Java 字符串,例如String xyz = "/*";,它们不会表示评论。至少您需要编写一个能够理解 Java 标记的词法分析器。不是一个完整的解析器,但用于 Java 的词法分析器已经足够复杂了。 -
听起来你需要一个简单的状态机,其中状态是“在块注释中”和“不在块注释中”
-
为什么每个人都说你必须小心评论中的
/*?当您找到第一个开始评论的/*时,您需要做的就是在此行或后续行中找到下一个出现的*/(或其\u等效项) - 无需寻找第二个@ 987654335@.
标签: java file bufferedreader