在使用正則表達式時,利用好其預編譯功能,可以有效加快正則匹配速度。
同時,Pattern要定義為static final靜態變量,以避免執行多次預編譯。
下面,我們列舉兩類使用正則的場景,來具體說明預編譯該如何使用:
【錯誤用法】
// 沒有使用預編譯
private void func(...) {
if (Pattern.matches(regexRule, content)) {
...
}
}
// 多次預編譯
private void func(...) {
Pattern pattern = Pattern.compile(regexRule);
Matcher m = pattern.matcher(content);
if (m.matches()) {
...
}
}
【正確用法】
private static final Pattern pattern = Pattern.compile(regexRule);
private void func(...) {
Matcher m = pattern.matcher(content);
if (m.matches()) {
...
}
}
正則的預編譯主要注意兩點:
1. Pattern 表達式要提前定義,不要再需要的地方臨時定義;
2. Pattern 表達式要定義為 static final 靜態變量,以避免執行多次預編譯。