JAVA中string.replace和string.replaceAll的区别及用法

如题所述

JAVA中string.replace()和string.replaceAll()的区别及用法乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样。 


public String replace(char oldChar,char newChar) 
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。 如 果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,用来表示与此 String 对象表示的字符序列相等的字符序列,除了每个出现的 oldChar 都被一个 newChar 替换之外。 

public String replaceAll(String regex,String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:  
Pattern.compile(regex).matcher(str).replaceAll(repl) 
参数: 
regex - 用来匹配此字符串的正则表达式  
返回:得到的 String  
抛出: PatternSyntaxException - 如果正则表达式的语法无效。



如果我有以下的字符串: 

String x= "[kllkklk\\kk\\kllkk]";


要将里面的“kk”替换为++,可以使用两种方法得到相同的结果  

replace(CharSequencetarget, CharSequencereplacement)  ——x.replace("kk", "++")
replaceAll(Stringregex, Stringreplacement)       ——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函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-02
这种东西都可以看api嘛
相似回答