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