解析java源代码以查找评论中的特定单词,然后使用下面的代码[重复]
Posted
技术标签:
【中文标题】解析java源代码以查找评论中的特定单词,然后使用下面的代码[重复]【英文标题】:parsing java source code to find particular words in comments and then use the code that follows [duplicate] 【发布时间】:2013-06-15 08:38:49 【问题描述】:所以这是我的问题。我需要通过一段很长的 java 代码并找到带有特定单词或语句的 cmets。如果存在,我需要将以下代码的一部分复制到文本文件中。例如。如果这个词是“猫”
/**
*this code is related to the cat
*/
public static int a = 5;
public static String b = "abcd";
我需要输出文本文件在注释后的第一个字符串带有单词“cat”,所以这里应该是“abcd”。我想我可以将整个代码解析为文本文件并查找 cmets,但有更快更智能的方法吗?
编辑: 我尝试做一个 grep 并且它不起作用,因为第一次出现的 String 距离可变,并且增加要占用的行数有时也包括下一条评论。
【问题讨论】:
我解决了那个问题,但我只需要示例中的字符串值,例如“abcd”。这也适用于这种情况吗?感谢您指出它。另外我不知道字符串可以出现在多少行中。我需要找到评论后第一个字符串的出现 为什么不 grep 并抓取周围的行,然后在 THAT 的结果上再做一次 grep? 我想我会试试的,非常感谢 试过了,但没有解决我的目的。在某些情况下,字符串是在评论后很长时间出现的,如果我增加行数,一些地方会包含下一条评论。 这不是重复的。 OP 已经声明 grep 作为解决方案不起作用,其目的不一定是在匹配表达式之后的第 N 行。 【参考方案1】:最大的问题是,要做到 100% 正确,您需要为 Java 语法编写/使用解析器,以确保得到您想要的。
一个选项虽然是循环文件内容并在扫描评论和扫描字符串之间切换状态。例如:
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);
上面的一些代码并不完全正确,但应该给出粗略的想法。
【讨论】:
确实,使用不忽略 cmets 的解析器(antlr、javacc 等)可能会更好。以上是关于解析java源代码以查找评论中的特定单词,然后使用下面的代码[重复]的主要内容,如果未能解决你的问题,请参考以下文章