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