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函数。