例如有如下x的字元串
String x = "[kllkklk\\kk\\kllkk]";
要将裡面的“kk”替換為++,可以使用兩種方法得到相同的結果 replace(CharSequence target, CharSequence replacement) —— x.replace("kk", "++")
replaceAll(String regex, String replacement) —— x.replaceAll("kk", "++")
可見兩個函數沒有什麼差別,下面将字元串中的“\\”替換為“++”System.out.println(x.replace("\\", "++")); 沒有問題
System.out.println(x.replaceAll("\\", "++")); 報錯 java.util.regex.PatternSyntaxException
可見,當使用轉義字元進行替換的時候,是有差別的。replaceAll的參數就是regex,是正規表達式。首先會轉義,是以報錯。
如果使用System.out.println(x.replaceAll("\\\\", "++"));即可完成。
那麼在使用普通的字元串替換時,選用哪一個函數呢?String x = "[kllkklk\\kk\\kllkk]";
String tmp;
//System.out.println(x.replace("[", "#").replace("]", "#"));
System.out.println(new Date().getTime());
for(int i =0;i<1000000;i++)
tmp=x.replace("kk", "--");
System.out.println(new Date().getTime());
for(int i =0;i<1000000;i++)
tmp=x.replaceAll("kk", "++");
System.out.println(new Date().getTime());
測試結果:
1312424571937
1312424574531
1312424576671
根據測試replaceAll函數要更快一些。看源碼發現,replace函數裡面仍使用replaceAll函數。
總體原則:
當字元串無法确定是否具有轉義字元時,而且也不需要轉義時,建議使用replace函數
否則,使用replaceAll函數