2013-06-27 77 views
0

replaceAll如果值爲'*',則拋出異常。replaceAll'*'

我想這

String tmp = "M ******* k"; 

tmp = tmp.replaceAll("****","NOT"); 

System.out.println("TMP is :"+tmp); 

和我得到這個例外

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 

爲什麼replaceAll*有這樣的行爲,我該怎麼解決這個問題解決?

回答

11

replaceAll()中的第一個參數需要一個正則表達式。字符'*'在正則表達式中有特殊含義。

將此字符串的每個子字符串替換爲給定替換的給定正則表達式。

所以你要逃避它,如果你想匹配字面character '*'.

使用"\\*".

oracle forum on the same

+2

+1的速度(和正確性,當然)。 :) – ninetwozero

1

嘗試逸出* S:

tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT"); 
1
tmp = tmp.replace("****","NOT"); // No regular expression 
tmp = tmp.replaceAll("\\*\\*\\*\\*","NOT"); 

第二種選擇是正則表達式之一。

1

你試過逃脫星號嗎?正如PatternSyntaxException指出的那樣,*是一個特殊字符,它需要一個字符類。

更合適的方式來做到這一點是:

tmp = tmp.replaceAll("\\*\\*\\*\\*", "NOT"); 
4

您可以檢查這些代碼以供參考:

public static void main (String[] args) 
    { 
      String tmp = "M ******* k"; 

      tmp = tmp.replaceAll("\\*","NOT"); 

      System.out.println("TMP is :"+tmp); 
    } 

「*」是正則表達式特殊字符在java.So您需要遵循正則表達式的規則。

http://docs.oracle.com/javase/tutorial/essential/regex/quant.html