public Matcher appendReplacement(StringBuffer sb, String replacement)
下面的方法爲什麼appenedReplacement()
方法應該使用緩衝區對象,爲什麼我們不使用輸入 字符串,而不是關了嗎?使用緩衝對象()Matcher類
public Matcher appendReplacement(StringBuffer sb, String replacement)
下面的方法爲什麼appenedReplacement()
方法應該使用緩衝區對象,爲什麼我們不使用輸入 字符串,而不是關了嗎?使用緩衝對象()Matcher類
如果你通過String
,而不是StringBuffer
,並在其上執行追加操作,然後將得到的結果,你必須有retrun該字符串,因爲字符串是不可改變所以對其執行任何opertaion創建新的String,誰調用的方法appenedReplacement()
包含舊的實際字符串的引用。
StringBuffer
爲您提供了追加字符串而不更改引用的功能。因此,即使沒有重新生成結果String
,對StringBuffer執行的任何操作仍然存在。
appendReplacement()
方法執行以下操作:
它從輸入序列讀數字符,從追加 位置,以及將它們附加到給定的字符串緩衝。它停止 閱讀的最後一個字符前面的比賽前,也就是在指數開始()的 字符後 - 1
它追加定替換字符串的字符串緩衝區。
它將此匹配器的追加位置設置爲匹配的最後一個 字符的索引,再加上一個,即結束()。
該方法旨在被在一個循環中與 appendTail一起使用,找到方法。下面的代碼,例如,在院子裏寫道 一隻狗兩條狗到標準輸出流:
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
由於String
類沒有任何append()
功能這就是爲什麼StringBuffer
在appendReplacement()
功能被使用。
謝謝,但這不是我的問題。我知道我們如何以及爲什麼使用它,我只想知道使用緩衝區對象,我們不能重寫輸入字符串序列嗎?如果可以的話,我們不必使用appendTail()方法。有什麼方法可以直接重寫輸入序列嗎? – Light
謝謝。但重寫一個字符串後,實際的參考變化是什麼? – Light