天天看點

java zhong replace函數_Java中String的替換函數:replace與replaceAll的差別

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