java中String字符串的替換函數:replace與replaceAll的區別


Ref:http://www.cnblogs.com/wnlja/p/3926779.html

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM