阿里巴巴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()) { ... } }
這樣抽取出來就避免了多次編譯和使用時編譯。