例如有如下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函數