天天看點

java 字元串替換 replace與replaceAll

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