阿里巴巴IDEA规约扫描插件可能在使用正则表达式时出现此提示,比如如下代码:
public void addSyncConfigToCache(String configName, ESSyncConfig config) {
...
Pattern pattern = Pattern.compile(".*:(.*)://.*/(.*)\\?.*$");
Matcher matcher = pattern.matcher(dataSource.getUrl());
//代码来自阿里巴巴开源项目Canal
...
上面代码就会出现问题提醒,我们展开提醒内容查看官方为我们的提示:
官方提醒:在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。 说明:不要在方法体内定义。
其实插件的意思是让我们把这个信息抽取到方法外面使其触发预编译。
private static final Pattern pattern = Pattern.compile(regexRule);
private void func(...) {
Matcher m = pattern.matcher(content);
if (m.matches()) {
...
}
}
这样抽取出来就避免了多次编译和使用时编译。