我正在尝试编写一个与java文件中的java doc注释匹配的正则表达式,而下面的代码似乎不起作用。
我特意尝试在第一次出现public class blah {
以下代码查找JAVA_COMMENT_OPEN_TAG
没有任何问题,但无法找到JAVA_COMMENT_CLOSE_TAG
代码:
public class JavaDocParser {
private String JAVA_COMMENT_OPEN_TAG = "^/\\*\\**+";
private String JAVA_COMMENT_CLOSE_TAG = "[.]+\\*{1}+/{1}$";
private StringBuilder javaDocComment = new StringBuilder();
public JavaDocParser(File javaFile) throws TestException {
parseJavaDocHeader(javaFile);
printJavaDocComment();
}
private void parseJavaDocHeader(File javaFile) throws TestException {
BufferedReader br = null;
Pattern openPattern = Pattern.compile(JAVA_COMMENT_OPEN_TAG);
Pattern closePattern = Pattern.compile(JAVA_COMMENT_CLOSE_TAG);
boolean openTagFound = false;
boolean closeTagFound = false;
try {
br = new BufferedReader(new FileReader(javaFile));
String line;
while((line = br.readLine()) != null) {
Matcher openMatcher = openPattern.matcher(line);
Matcher closeMatcher = closePattern.matcher(line);
if(openMatcher.matches()) {
System.out.println("OPEN TAG FOUND ON LINE: ====> " + line);
openTagFound = true;
}
if(closeMatcher.matches()) {
System.out.println("CLOSE TAG FOUND ON LINE: ====> " + line);
closeTagFound = true;
}
if(openTagFound) {
addToStringBuilder(line);
} else if(closeTagFound) {
break;
}
}
} catch (FileNotFoundException e) {
throw new TestException("The " + javaFile.getName() +" file provided could not be found. Check the file and try again.");
} catch (IOException e) {
throw new TestException("A problem was encountered while reading the .java file");
} finally {
try {
if(br != null) { br.close(); }
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void addToStringBuilder(String stringToAdd) {
javaDocComment.append(stringToAdd + "\n");
}
public String getJavaDocComment() { return javaDocComment.toString(); }
public void printJavaDocComment() { System.out.println(javaDocComment.toString()); }
}
答案 0 :(得分:2)
您可以使用以下内容:
private String JAVA_COMMENT_OPEN_TAG = "^/\*\*";
private String JAVA_COMMENT_CLOSE_TAG = ".*?\*+/$";
请参阅DEMO
答案 1 :(得分:0)
在正则表达式中,您包含行格式^
和$
的开头和结尾。但是你可以在评论之前或之后有空格
使用它可能会更安全:
private String JAVA_COMMENT_OPEN_TAG = "^\\s*/\\*\\**+";
private String JAVA_COMMENT_CLOSE_TAG = "[.]+\\*{1}+/{1}\\s*$";