背景
有时,我们需要删除Java源代码中的注释。目前有不少方法,比如:实现状态机。该方式较为通用,适用于多种语言(取决于状态机支持的注释符号)。
正则匹配。该方式容易误判,尤其是容易误删字符串。
利用第三方库。该方式局限性较强,比如不同语言可能有不同的第三方库。
本文针对Java语言,介绍一种利用第三方库的方式,可以方便快速地移除代码中的注释。
原理
这个第三方库叫做JavaParser。它可以分析Java源码,并生成语法分析树(AST),其中注释也属于AST中的节点。
因此核心思路即为:JavaParser解析源码并得到AST。
识别出注释类型的节点并将其删掉。
将AST中剩余的节点按一定规则打印出来。
在实践之前,我们先要了解Java中的几种注释类型:LineComment 单行注释。
BlockComent 块注释。
JavadocComment Java文档注释。
下面举个简单例子,说明三种注释的区别:importjava.util.ArrayList;importjava.util.stream.Collectors;/**
*@authorxiaoxi666
*@date-02-1517:13
*我是Javadoc注释*/publicclassInput{/***我是Javadoc注释
*
*@paramparam1
*@paramparam2*/publicstaticvoidsomeMethod(Stringparam1,//我是单行注释Stringparam2//我是单行注释Stringparam3,/*我是块注释Stringparam4,
Stringparam5,
Stringparam6*//*我是块注释Stringparam4*/)
{//我是单行注释inta=1;/*我是块注释,注意我和Javadoc注释的区别,我只有一个星号*/intb=2;/**我是块注释*/intc=3;
Strings1="//我是字符串中的内容,不是注释";
Strings2="/*我是字符串中的内容,不是注释*/";
Strings3="/**我是字符串中的内容,不是注释*/";
}
}
下面我们实践一下,看看怎么移除源码中的注释。
我这里使用maven管理项目,首先引入JavaParser依赖:com.github.javaparserjavaparser-symbol-solver-core3.18.0
然后编写核心代码:packagecore;
importcom.github.javaparser.JavaParser;importcom.github.javaparser.ParseResult;importcom.github.javaparser.ParserConfiguration;