仅用于开头 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