替换String中的所有双引号

Mal*_*Tec 53 java regex

我正在从数据库中检索数据,其中该字段包含带有HTML数据的String.我想替换所有的双引号,使得它可以被用于parseJSONjQuery的.

使用Java,我试图用...替换引号

details.replaceAll("\"","\\\"");
  //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34");
Run Code Online (Sandbox Code Playgroud)

结果字符串未显示所需的更改.O'Reilly 文章规定使用Apache字符串工具.还有别的办法吗?

是否有正则表达式或我可以使用的东西?

aio*_*obe 96

这是如何做

String details = "Hello \"world\"!";
details = details.replace("\"","\\\"");
System.out.println(details);               // Hello \"world\"!
Run Code Online (Sandbox Code Playgroud)

请注意,字符串是不可变的,因此仅仅这样做是不够的details.replace("\"","\\\"").您必须将变量重新分配details给结果字符串.


运用

details = details.replaceAll("\"","&quote;");
Run Code Online (Sandbox Code Playgroud)

相反,结果

Hello &quote;world&quote;!
Run Code Online (Sandbox Code Playgroud)


小智 30

不一定是这样的:

.replaceAll("\"","\\\\\"")
Run Code Online (Sandbox Code Playgroud)

替换字符串中的五个反斜杠.

  • 是的,如果您使用`replaceAll()`,那将是正确的方法.这就是为什么每个人都说使用`replace()`代替.;) (6认同)
  • 为什么3个反斜杠使用replace()但使用replaceAll()有5个反斜杠? (3认同)
  • 我认为答案在方法签名中。在这种情况下,replace方法实际上是replace(CharSequence cs,CharSequence cs1),而replaceAll是replaceAll(String string,String string1)。要将String作为参数传递,您需要那些额外的反斜杠。 (2认同)

小智 5

我认为正则表达式在这种情况下有点过分.如果您只想删除字符串中的所有引号,我会使用以下代码:

details = details.replace("\"", "");
Run Code Online (Sandbox Code Playgroud)


Mik*_*uel 5

为了使其在 JSON 中工作,您需要转义更多字符。

myString.replace("\\", "\\\\")
    .replace("\"", "\\\"")
    .replace("\r", "\\r")
    .replace("\n", "\\n")
Run Code Online (Sandbox Code Playgroud)

如果你想能够使用json2.js它来解析它那么你还需要转义

   .replace("\u2028", "\\u2028")
   .replace("\u2029", "\\u2029")
Run Code Online (Sandbox Code Playgroud)

JSON 允许使用带引号的字符串,但 JavaScript 不允许。