5

我有一个很长的 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

4 回答 4

16

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

replaceAll- 需要正则表达式

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

所以像这样:

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

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

于 2013-02-14T21:11:08.853 回答
4

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

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

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

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

于 2013-02-14T21:03:35.993 回答
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."
于 2013-02-14T21:04:21.060 回答
0

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

bigString.replaceAll("\\\\", "");
于 2013-02-14T21:05:19.140 回答