天天看點

java字元串的替換replace、replaceAll、replaceFirst的差別詳解

如果不是剛剛複習了下正規表達式,我可能也不會注意到,原來String的replaceAll跟replaceFirst用到了正規表達式!

不多解釋,看代碼:

String s = "my.test.txt";
System.out.println(s.replace(".", "#"));
System.out.println(s.replaceAll(".", "#"));
System.out.println(s.replaceFirst(".", "#"));      

運作結果:

my#test#txt
###########
#y.test.txt      

是不是感覺很神奇?

其實懂正規表達式的應該已經發現了,是的,“.”是正規表達式的元字元,比對除換行符以外的任意字元,是以replaceAll、replaceFirst才出現了這樣的結果。

而replace沒有用到正規表達式,但會把所有“.”替換掉,很多人可能會誤解replace是替換單個,而replaceAll是替換全部,其實這是錯的(我以前也是這麼想的- -)。replace隻是沒有用到正規表達式,但會替換所有比對的字元串。

到這裡一些不懂正規表達式的小夥伴可能就要喊坑爹了,“那我不想用正規表達式去替換第一個字元串腫麼辦?”其實也很簡單,隻要将元字元串轉義就行了。 

s.replaceFirst("\\.", "#")      

運作結果: 

my#test.txt      

這裡給個會被正規表達式識别的字元清單:

.比對除換行符以外的任意字元

^比對字元串的開始

$比對字元串的結束

*重複零次或更多次

+重複一次或更多次

?重複零次或一次

當然,正則可遠不止這麼點,個人建議花點時間去學習一下比較好~

補充:String的split也是用到了正規表達式,使用的時候注意點哦!