java字串的替換replace、replaceAll、replaceFirst的區別詳解
阿新 • • 發佈:2019-02-02
如果不是剛剛複習了下正則表示式,我可能也不會注意到,原來String的replaceAll跟replaceFirst用到了正則表示式!
不多解釋,看程式碼:
1 2 3 4 |
String s = "my.test.txt" ;
System.out.println(s.replace( "." , "#" ));
System.out.println(s.replaceAll( "." , "#" ));
System.out.println(s.replaceFirst( "." , "#" ));
|
執行結果:
1 2 3 |
my#test#txt
########### #y.test.txt
|
是不是感覺很神奇?
其實懂正則表示式的應該已經發現了,是的,“.”是正則表示式的元字元,匹配除換行符以外的任意字元,所以replaceAll、replaceFirst才出現了這樣的結果。
而replace沒有用到正則表示式,但會把所有“.”替換掉,很多人可能會誤解replace是替換單個,而replaceAll是替換全部,其實這是錯的(我以前也是這麼想的- -)。replace只是沒有用到正則表示式,但會替換所有匹配的字串。
到這裡一些不懂正則表示式的小夥伴可能就要喊坑爹了,“那我不想用正則表示式去替換第一個字串腫麼辦?”其實也很簡單,只要將元字串轉義就行了。
1 |
s.replaceFirst( "\\." , "#" )
|
執行結果:
1 |
my#test.txt
|
這裡給個會被正則表示式識別的字元列表:
.匹配除換行符以外的任意字元
^匹配字串的開始
$匹配字串的結束
*重複零次或更多次
+重複一次或更多次
?重複零次或一次
當然,正則可遠不止這麼點,個人建議花點時間去學習一下比較好~
補充:String的split也是用到了正則表示式,使用的時候注意點哦!