java.lang.String中的replace方法到底替換了一個還是全部替換了。


你沒有看錯我說的就是那個最常用的java.lang.String,String可以說在Java中使用量最廣泛的類了。
但是我卻發現我弄錯了他的一個API(也可以說是兩個API),這個API是關於字符串替換的。

我的錯誤見解

之前我一直以為String有個API是這樣子的,String replace(String oldString, String newString) 用來替換String中的第一個oldString為newString,這可能和我之前做的東西基本山替換的都是單一的字符串有關吧。
但是當我看到隊友寫的代碼int containStringNumber = string.length() - string.replace("containString", "").length(),我認為containStringNumber的值是0或者1,但是我錯了。這個結果可能會大於1的。

實際情況

通過API文檔可以看出來String有4個替換方法:

1. String	replace(char oldChar, char newChar)    
    描述:Returns a string resulting from replacing all occurrences of oldChar in this string with newChar.
    谷歌翻譯:返回使用newChar替換此字符串中所有出現的oldChar而產生的字符串。  
2. String	replace(CharSequence target, CharSequence replacement)  
    描述:Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence.    
    谷歌翻譯: 將與該文字目標序列匹配的此字符串的每個子字符串替換為指定的文字替換序列。  
3. String	replaceAll(String regex, String replacement)  
    描述:Replaces each substring of this string that matches the given regular expression with the given replacement.
    谷歌翻譯:將給定替換的給定正則表達式匹配的此字符串的每個子字符串替換。  
4. String	replaceFirst(String regex, String replacement)
    描述:Replaces the first substring of this string that matches the given regular expression with the given replacement.
    谷歌翻譯:將給定替換的給定正則表達式匹配的此字符串的第一個子字符串替換。

是的,String里面根本沒有跟那個我自以為是的方法。
第一個方法是替換第一個沒錯,但是替換的是一個char,不是String這兒也是替換全部的的char類型,不是部分替換。
第二個方法是替換的CharSequence(包括String, StringBuffer, StringBuilder),但是替換的是全部。
第三個replaceAll是替換全部的字符串正則表達式,
第四個是缺實是替換了第一個,但是人家名字寫得明明白白的replaceFirst,而且替換的也是正則表達式。

教訓與總結

這讓我想起來前天的一篇文章《On The Value Of Fundamentals In Software Development 》,英文不好的可以自己翻譯下。
我要好好學習Java的API了,白干了四年了,純屬一級菜鳥啊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM