packagecore;
importcom.github.javaparser.JavaParser;importcom.github.javaparser.ParseResult;importcom.github.javaparser.ParserConfiguration;importcom.github.javaparser.ast.CompilationUnit;importcom.github.javaparser.ast.Node;importcom.github.javaparser.ast.comments.BlockComment;importcom.github.javaparser.ast.comments.Comment;importcom.github.javaparser.ast.comments.LineComment;importcom.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;importjava.util.List;importjava.util.Optional;importjava.util.stream.Collectors;/***@authorxiaoxi666
* @date 2021-02-15 20:09
* 几个注释的概念:
* LineComment
* BlockComment
* JavadocComment*/
public final classCommentsRemover {privateCommentsRemover() {}public staticString doAction(String content) {
JavaParser javaParser=createJavaParser();
ParseResult result =javaParser.parse(content);
Optional optionalCompilationUnit =result.getResult();if (!optionalCompilationUnit.isPresent()) {return "";
}
CompilationUnit compilationUnit=optionalCompilationUnit.get();
removeComments(compilationUnit);returnLexicalPreservingPrinter.print(compilationUnit);
}private static voidremoveComments(CompilationUnit compilationUnit) {
List comments =compilationUnit.getAllContainedComments();
List unwantedComments =comments
.stream()
.filter(CommentsRemover::isValidCommentType)
.collect(Collectors.toList());
unwantedComments.forEach(Node::remove);
}/*** 创建源码解析器。我们设置LexicalPreservationEnabled为true,保留源码中的所有语法。
*
*@returnJavaParser*/
private staticJavaParser createJavaParser() {
ParserConfiguration parserConfiguration= newParserConfiguration();
parserConfiguration.setLexicalPreservationEnabled(true);return newJavaParser(parserConfiguration);
}/*** 我们只识别单行注释和块注释
*
*@paramcomment
*@returntrue if meet the correct type*/
private static booleanisValidCommentType(Comment comment) {return comment instanceof LineComment || comment instanceofBlockComment;
}
}