我有一个很长的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附近出现意外的内部错误
有什么想法吗?提前谢谢。
答案 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("\\\\", "");