1. 程式人生 > >字串替換replace, replaceAll, replaceFirst的區別

字串替換replace, replaceAll, replaceFirst的區別

replace和replaceAll有些人很容易搞混,因此我在這裡詳細講述下。

replace的引數是char和CharSequence,即可以支援字元的替換,也支援字串的替換(CharSequence即字串序列的意思,說白了也就是字串);

replaceAll的引數是regex,即基於規則表示式的替換,比如:可以通過replaceAll("\\d", "*")把一個字串所有的數字字元都換成星號;

相同點:都是全部替換,即把源字串中的某一字元或字串全部換成指定的字元或字串;

不同點:replaceAll支援正則表示式,因此會對引數進行解析(兩個引數均是),如replaceAll("\\d", "*"),而replace則不會,replace("\\d","*")就是替換"\\d"的字串,而不會解析為正則。

另外還有一個不同點:“\”在java中是一個轉義字元,所以需要用兩個代表一個。例如System.out.println( "\\" ) ;只打印出一個"\"。但是“\”也是正則表示式中的轉義字元,需要用兩個代表一個。所以:\\\\被java轉換成\\,\\又被正則表示式轉換成\,因此用replaceAll替換“\”為"\\",就要用replaceAll("\\\\","\\\\\\\\"),而replace則replace("\\","\\\\")。

如果只想替換第一次出現的,可以使用replaceFirst(),這個方法也是基於規則表示式的替換,但與replaceAll()不同的是,只替換第一次出現的字串。

 

說到正則表示式,有個例子就能很好的解釋replaceAll的用法。即替換空格

String test = "wa n\tg_p\\te\\tn g";
test = test.replaceAll("\\t|\\\\t|\u0020|\\u3000", "");//去掉空格
System.out.println(test);
其中

test = test.replaceAll("\\t|\\\\t|\u0020|\\u3000", "")

test = Pattern.compile("\\t|\\\\t|\u0020|\\u3000").matcher(test).replaceAll("")
是等效的,

因此用正則表示式僅僅是替換全部或替換第一個的話,用replaceAll或replaceFirst即可。
--------------------- 
作者:wangpeng047 
來源:CSDN 
原文:https://blog.csdn.net/wangpeng047/article/details/8985236 
版權宣告:本文為博主原創文章,轉載請附上博文連結!