java字符串的替換replace、replaceAll、replaceFirst的區別詳解

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

很少解釋,看代碼:正則表達式

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

是否是感受很神奇?spa

其實懂正則表達式的應該已經發現了,是的,「.」是正則表達式的元字符,匹配除換行符之外的任意字符,因此replaceAll、replaceFirst纔出現了這樣的結果。code

replace沒有用到正則表達式,但會把全部「.」替換掉,不少人可能會誤解replace是替換單個,而replaceAll是替換所有,其實這是錯的(我之前也是這麼想的- -)。replace只是沒有用到正則表達式,但會替換全部匹配的字符串。字符串

到這裏一些不懂正則表達式的小夥伴可能就要喊坑爹了,「那我不想用正則表達式去替換第一個字符串腫麼辦?」其實也很簡單,只要將元字符串轉義就好了。it

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

運行結果:class

my#test.txt

這裏給個會被正則表達式識別的字符列表:test

.匹配除換行符之外的任意字符時間

^匹配字符串的開始

$匹配字符串的結束

*重複零次或更屢次

+重複一次或更屢次

?重複零次或一次

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

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

相關文章
相關標籤/搜索