2017-05-26 77 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