java 字串替換 replace與replaceAll
阿新 • • 發佈:2019-02-13
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:
結果:Hello++Worldpublic class StringReplaceEmp{ public static void main(String args[]){ String str="Hello\\World"; String newStr; newStr = str.replace("\\","++"); System.out.println(newStr); } }
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函式。