2014-01-14 50 views
1
public Matcher appendReplacement(StringBuffer sb, String replacement) 

下面的方法爲什麼appenedReplacement()方法應該使用緩衝區對象,爲什麼我們不使用輸入 字符串,而不是關了嗎?使用緩衝對象()Matcher類

回答

1

如果你通過String,而不是StringBuffer,並在其上執行追加操作,然後將得到的結果,你必須有retrun該字符串,因爲字符串是不可改變所以對其執行任何opertaion創建新的String,誰調用的方法appenedReplacement()包含舊的實際字符串的引用。

StringBuffer爲您提供了追加字符串而不更改引用的功能。因此,即使沒有重新生成結果String,對StringBuffer執行的任何操作仍然存在。

Matcher
StringBuffer
String

+0

謝謝。但重寫一個字符串後,實際的參考變化是什麼? – Light

1

appendReplacement()方法執行以下操作:

它從輸入序列讀數字符,從追加 位置,以及將它們附加到給定的字符串緩衝。它停止 閱讀的最後一個字符前面的比賽前,也就是在指數開始()的 字符後 - 1

它追加定替換字符串的字符串緩衝區。

它將此匹配器的追加位置設置爲匹配的最後一個 字符的索引,再加上一個,即結束()。

Matcher

該方法旨在被在一個循環中與 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()功能這就是爲什麼StringBufferappendReplacement()功能被使用。

+0

謝謝,但這不是我的問題。我知道我們如何以及爲什麼使用它,我只想知道使用緩衝區對象,我們不能重寫輸入字符串序列嗎?如果可以的話,我們不必使用appendTail()方法。有什麼方法可以直接重寫輸入序列嗎? – Light