正则表达式只针对开放的java doc评论

时间:2015-05-22 18:13:13

标签: java regex javadoc

我正在尝试编写一个与java文件中的java doc注释匹配的正则表达式,而下面的代码似乎不起作用。

我特意尝试在第一次出现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()); }
}

2 个答案:

答案 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*$";