2013-02-14 131 views
4

我还有很长的Java String,它包含了许多逃脱双引号的:的Java删除逃脱双引号

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

我想删除所有的转义双引号(\"),并与普通双层替换它们-quotes("),使我得到:

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

我认为这是一个没有脑子。我最好的尝试:

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

抛出以下异常:

意外指数近1

任何想法内部错误?提前致谢。

+0

你究竟是如何得到这样一串? – EJP 2013-02-15 02:58:38

回答

11

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

replaceAll - 需要正则表达式

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

所以这样的:

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

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

+0

每个人都在想“哦,我知道如何解决这个问题”,然后忘了看到替代方案:) +1使用更好的版本。 – 2013-02-14 21:13:31

+0

+1,即使在我不需要正则表达式的情况下,我也永远不会使用replace()。:( – PermGenError 2013-02-14 21:13:51

+1

每个人都专注于纠正正则表达式,其中更简单的就是不使用它。+1在盒子外面思考:) – Pshemo 2013-02-14 21:13:53

4

全部替换使用正则表达式,所以加\\

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

解释为何另一组: “\” 是由Java的interpretad作为一个正常的\。但是,如果仅在参数中使用该参数,则它将成为正则表达式\。正则表达式中的\可以转义下一个字符。由于没有找到,它会引发异常。

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

+3

这将删除所有反斜杠,而不仅仅是引用之前的那些反斜杠。 – 2013-02-14 21:05:22

+0

对不起,编辑了这篇文章。 – 2013-02-14 21:07:42

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." 
0

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

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