Java删除转义双引号

时间:2013-02-14 21:02:06

标签: java regex

我有一个很长的Java字符串,其中包含许多转义的双引号:

// Prints: \"Hello my name is Sam.\" \"And I am a good boy.\"
System.out.println(bigString);

我想删除所有转义的双引号(\")并将其替换为普通的双引号("),以便我得到:

// Prints: "Hello my name is Sam." "And I am a good boy."
System.out.println(bigString);

我认为这是一个明智的选择。我最好的尝试:

bigString = bigString.replaceAll("\\", "");

引发以下异常:

  

索引1附近出现意外的内部错误

有什么想法吗?提前谢谢。

4 个答案:

答案 0 :(得分:15)

每个人都在告诉您使用replaceAll,更好的答案是使用replace

replaceAll - 需要正则表达式

replace [javadoc] - 只是一个字符串搜索并替换

所以这样:

bigString = bigString.replace("\\\"", "\"");

请注意,这也更快,因为不需要正则表达式。

答案 1 :(得分:4)

替换所有使用正则表达式,因此添加另一组\\

bigString = bigString.replaceAll("\\\\\"", "\"");

解释原因: “\”是java解释为普通\。但是,如果您只在参数中使用它,它将成为正则表达式\。正则表达式中的\将转义下一个字符。由于没有找到,它会引发异常。

当您使用Java "\\\\\""编写时,它首先被java视为正则表达式\\"。然后,正则表达式实现将其视为“反斜杠后跟双引号”。

答案 2 :(得分:1)

  String str="\"Hello my name is Sam.\" \"And I am a good boy.\"";
  System.out.println(str.replaceAll("\\\"", "\""));

输出:

 "Hello my name is Sam." "And I am a good boy."

答案 3 :(得分:0)

replaceAll的第一个参数是正则表达式。你通过\,这不是一个有效的正则表达式。尝试:

bigString.replaceAll("\\\\", "");