java 字符串替换 replace与replaceAll

来源:互联网 发布:淘宝买二手手机靠谱吗 编辑:程序博客网 时间:2024/06/05 14:24


replace与replaceAll方法都是用来替换字符串的。

首先,我们先比较一下这两种函数的性能:

示例:

public class StringReplaceEmp{   public static void main(String args[]){      String str="Hello World";  String newStr;  long startTime = System.currentTimeMillis();  for(int i = 0;i<50000;i++){newStr = str.replace('H','W'); //将Hello中的H替换为W  }  long endTime = System.currentTimeMillis();  System.out.println("replace函数所花的时间:"+(endTime-startTime)+"毫秒");  long startTime1 = System.currentTimeMillis();  for(int i = 0;i<50000;i++){  newStr = str.replace('H','W');  }  long endTime1 = System.currentTimeMillis();  System.out.println("replaceAll函数所花的时间:"+(endTime1-startTime1)+"毫秒");   }}
结果:

replace函数所花的时间:21毫秒
replaceAll函数所花的时间:7毫秒

注释:System.currentTimeMillis() 是指获取当前时间的毫秒数,自1970年1月1日0时起至当前时间的毫秒数。

经过测试,说明replaceAll比replace执行速度是要快的。


然后我们测试一下有转义字符的替换:

replace:

public class StringReplaceEmp{   public static void main(String args[]){      String str="Hello\\World";  String newStr;  newStr = str.replace("\\","++");  System.out.println(newStr);   }}
结果:Hello++World

replaceAll:

public class StringReplaceEmp{   public static void main(String args[]){      String str="Hello\\World";  String newStr;  newStr = str.replaceAll("\\","++");  System.out.println(newStr);   }}
结果:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.compile(Pattern.java:1671)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.replaceAll(String.java:2162)
at file.main(file.java:5)

但如果将"\\"改为"\\\\"就不会报错了。

public class StringReplaceEmp{   public static void main(String args[]){      String str="Hello\\World";  String newStr;  newStr = str.replaceAll("\\\\","++");  System.out.println(newStr);   }}
结果:Hello++World

总结:如果是一般的没有转义字符的建议使用replaceAll函数来替换字符串。

若是有转义字符还是使用replace函数。

0 0
原创粉丝点击