我試圖用長字符串替換某些單詞。會發生什麼是一些話保持不變,有些改變。不改變的詞似乎讓matcher
卡住了一個無限循環,因爲它不斷嘗試對保持不變的單詞執行相同的操作。下面是一個類似於我的例子 - 我不能把我使用的確切代碼,因爲它更詳細,會佔用太多的空間,我害怕。匹配查找無限循環
public String test() {
String temp = "<p><img src=\"logo.jpg\"/></p>\n<p>CANT TOUCH THIS!</p>";
Pattern pattern = Pattern.compile("(<p(\\s.+)?>(.+)?</p>)");
Matcher matcher = pattern.matcher(temp);
StringBuilder stringBuilder = new StringBuilder(temp);
int start;
int end;
String match;
while (matcher.find()) {
start = matcher.start();
end = matcher.end();
match = temp.substring(start, end);
stringBuilder.replace(start, end, changeWords(match));
temp = stringBuilder.toString();
matcher = pattern.matcher(temp);
System.out.println("This is the word I'm getting stuck on: " + match);
}
return temp;
}
public String changeWords(String words) {
return "<p><img src=\"logo.jpg\"/></p>";
}
任何有關爲什麼會發生這種情況的建議?
我知道。我上面放置的例子有意用來說明這樣一個事實:有些單詞可能保持不變,但匹配器應該移到下一個匹配上,而不是在同一個匹配上空轉。 – ThreaT