2017-05-26 73 views
1

我想從下面String更換"{Java;字符串的replaceAll給錯誤

public static void main(String args[]){ 
    String input="Subtitle,\"{\"key\": \"IsReprint\", \"value\":\"COPY\"}"; 

    input=input.replaceAll("\"{", "{"));   

    System.out.println("String ::::"+input); 
} 

我得到這個錯誤:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1 
    \"{ 
    ^
+0

你的意思是使用'replace'呢? –

+2

你不能使用'「\」{「'它是錯誤的 – Luke

+0

[PatternSyntaxException:在Java中使用正則表達式時非法重複]的可能重複(https://stackoverflow.com/questions/8751482/patternsyntaxexception-illegal-repetition-when-使用-regex-in-java) – crizzis

回答

0

有兩種方式:

首先你要請使用\\{轉義{,因爲replaceAll使用正則表達式,因此您必須轉義"{

input=input.replaceAll("\"\\{", "{"); 

二是使用replace代替,如果你沒有這個複雜的正則表達式:

input=input.replace("\"{", "{"); 
+1

感謝YCF ......它的工作 – Murali

0

replaceAll需要一個正則表達式作爲參數。 {在正則表達式特殊的意義,所以必須通過做

input=input.replaceAll("\"\\{", "{"); 

或使用replace,這並不需要一個正則表達式作爲參數,以逃避{

input=input.replace("\"{", "{"); 
+0

'{在正則表達式中有一個特殊的含義'如果它不含糊不清,否則它不會.Java可能仍然是這樣,但每個其他引擎消除歧義 – sln

+0

謝謝Chandler Bing ... – Murali

0

當您調用replaceAll時,您不會正確地轉義「{」字符。

您需要在任何正則表達式(regExp)之前使用「雙斜槓」\\。

下面是一個例子:

public static void main(String args[]){ 
    String input="Subtitle,\"{\"key\": \"IsReprint\", \"value\":\"COPY\"}"; 

    System.out.println(input.replaceAll("\\{", "*")); 
} 

我的例子取代了 「{」 字符與*:

"\\{", "*" 

運行,你得到的輸出中:

Subtitle,"*"key": "IsReprint", "value":"COPY"} 

隨着輸入:

String input="{{ }}"; 

你得到的輸出:

** }} 
+0

謝謝你們......它的工作。我使用如下。\t input =(input.replaceAll(「\」\\ {「,」{「)); – Murali