仅用于开头 java 文档注释的正则表达式
Regex for only the opening java doc comments
我正在尝试编写一个匹配 java 文件中的 java 文档注释的正则表达式,但我下面的代码似乎无法正常工作。
我专门尝试匹配 仅 首次出现 public class blah {
之前的初始 javadoc 评论
下面的代码找到 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()); }
}
在您的正则表达式中,您包括行模式 ^
和 $
的开头和结尾。但是你可以在评论之前或之后有空格
也许使用更安全:
private String JAVA_COMMENT_OPEN_TAG = "^\s*/\*\**+";
private String JAVA_COMMENT_CLOSE_TAG = "[.]+\*{1}+/{1}\s*$";
您可以使用以下内容:
private String JAVA_COMMENT_OPEN_TAG = "^/\*\*";
private String JAVA_COMMENT_CLOSE_TAG = ".*?\*+/$";
见DEMO
我正在尝试编写一个匹配 java 文件中的 java 文档注释的正则表达式,但我下面的代码似乎无法正常工作。
我专门尝试匹配 仅 首次出现 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()); }
}
在您的正则表达式中,您包括行模式 ^
和 $
的开头和结尾。但是你可以在评论之前或之后有空格
也许使用更安全:
private String JAVA_COMMENT_OPEN_TAG = "^\s*/\*\**+";
private String JAVA_COMMENT_CLOSE_TAG = "[.]+\*{1}+/{1}\s*$";
您可以使用以下内容:
private String JAVA_COMMENT_OPEN_TAG = "^/\*\*";
private String JAVA_COMMENT_CLOSE_TAG = ".*?\*+/$";
见DEMO