我遇到了一個與我的程序有關的小問題。它似乎凍結了,最有可能是由while循環造成的。模式匹配時凍結
我想要做的是拿起並替換Java評論。因此,在輸入塊註釋時,您將以/*
開啓該評論。如果沒有關閉結束(*/
),程序將凍結5-6秒並且無法使用。我用更多的正則表達式和超過10,000行的文件運行了這個文件,沒有任何性能問題,所以任何類型的性能下降都令人震驚,但僅僅延遲了5秒。
private static final String COMMENT_MATCHER = "(//.*)|(/\\u002A((\\s)|(.))*?\\u002A/)";
private String clearMatches(String code, final String regex) {
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(code);
while (matcher.find()) {
final String match = matcher.group();
code = code.replace(match, CharBuffer.allocate(match.length()).toString());
}
return code;
}
我猜測問題在於它發現許多匹配並遍歷所有匹配,由於星號流星。
問候,Obicere。
我相信你可以做一個兩杆的方法幫助調試 - 一個用於多行註釋,一個用於單行註釋。例如,有兩個常量'SINGLE_LINE_COMMENT_MATCHER'和'MULTI_LINE_COMMENT_MATCHER',每個都有自己的正則表達式。 – Meesh
@Meesh匹配器匹配評論沒問題,只是當多行註釋沒有結束時。當你打字時,你遇到了。 – Obicere
如果你用'Pattern.DOTALL'編譯它,你的模式可以被簡化爲更易讀(至少對我來說)版本'「// [[\ n] * | /[*].*?[*]/]'在開始時是否加入'(?s)'? – Pshemo