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


如果不是剛剛復習了下正則表達式,我可能也不會注意到,原來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也是用到了正則表達式,使用的時候注意點哦!


免責聲明!

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



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