parsing java source code to find particular words in comments and then use the code that follows
所以这是我的问题。 我需要经历一个很长的java代码,并找到具有特定单词或语句的注释。 如果它存在,我需要将以下代码的一部分复制到文本文件中。 例如。 如果这个词是"猫"
1 2 3 4 5
| /**
*this code is related to the cat
*/
public static int a = 5;
public static String b ="abcd"; |
我需要输出文本文件在注释后面加上第一个字符串"cat",所以这里它将是"abcd"。 我想我可以将整个代码解析为文本文件并查找注释但是有更快更聪明的方法吗?
编辑:
我尝试做一个grep并且它不起作用,因为String的第一次出现是可变距离并且增加行数有时也包括下一个注释。
-
我经历了那个问题,但后来我只需要像示例中的字符串值"abcd"。这也适用于这个案子吗?谢谢你的指点。此外,我不知道字符串可以出现多少行。我需要在评论后找到第一个字符串的出现位置
-
为什么不grep和抓住周围的线,然后在那个做另一个grep的结果?
-
我想我会非常感谢你
-
尝试了但是没有解决我的目的..在某些情况下,字符串在评论后很长一段时间,如果我增加了我采取的行数,一些地方下一个评论被包括在内。
-
你可以修改评论吗?也许doclet可以做你需要的:docs.oracle.com/javase/6/docs/technotes/guides/javadoc/doclet/…
-
不幸的是我无法修改代码。我需要它来处理任何java代码。谢谢你的链接
-
这不是重复的。 OP已经声明grep作为解决方案不起作用,并且意图不一定在匹配表达式之后对第N行进行精细化。
最大的问题是,要正确地执行100%正确的问题,您需要编写/使用Java语法的解析器,以确保您获得了预期的结果。
但是一个选项是循环文件内容并在扫描注释和扫描字符串之间切换状态。 例如:
1 2 3 4 5 6 7 8 9 10 11 12
| Pattern stringPattern = Pattern. compile("String [^=]*= \"([^\"]*)\"");
boolean searchComment = true;
for (String line :fileLines ) {
if(searchComment ) {
searchComment = !line. contains(statement );
} else {
Matcher m = stringPattern. matcher(line );
if (m. matches()) {
String value = m. group(1);
}
}
} |
上面的一些代码并不完全正确,但应该给出粗略的想法。
-
实际上,使用不忽略注释的解析器(antlr,javacc等)可能更好。