Java: 将\"替换为",将\/替换为/

3

我正在创建JSON字符串,以便发送到服务器。 我使用GSon生成JSON字符串。 因为我的服务器不理解像这样的字符串:\"key\":value而是理解"key":value"a\/b"但使用a/b。 因此,在生成JSON字符串之后,我使用replaceAll方法来修复它:

String res = original.replaceAll("\\/", "/").replaceAll("\\"", "\"");

但是这种方法并不像我预期的那样有效。请告诉我如何替换字符串以符合上述服务器要求。
谢谢:)
3个回答

9
  1. 你想匹配的内容:"
  2. 反斜杠是正则表达式的特殊字符(用于转义),所以你需要对它们进行转义:\\"
  3. 反斜杠也是Java字符串中的特殊字符(同样用于转义),所以你需要对它们进行转义:\\\\\\"
  4. 双引号在Java中也需要转义(因为它是字符串文字定界符):\\\\\\\"

你想要替换成双引号,所以需要再次应用第4点:

.replaceAll("\\\\\"", "\"")

同样的逻辑适用于另一个替换(不包括点#4,因为没有双引号):
.replaceAll("\\\\/", "/")

合并成一个正则表达式:

.replaceAll("\\\\([\"/])", "$1")

@hqt:这个答案比我的更优雅,请考虑接受它。 - Tim Pietzcker
@TimPietzcker 是的。spOOm解决方案很优雅,但对于新手来说不太直观,但他已经很好地解释了如何到达最后一个点。只是因为你先发了 :D 谢谢提醒我 :) - hqt

4
欢迎来到Java反斜杠地狱:
String res = original.replaceAll("\\\\\"", "\"").replaceAll("\\\\/", "/");

在正则表达式中,\\匹配一个单独的\字符,在字符串中(你从中构建正则表达式),你需要为每个字面意义上的"\"写入"\\",因此,你需要四个反斜杠来匹配一个实际的反斜杠。

如果Java有像Ruby、Perl或JavaScript一样的直接使用正则类型或C#、Python一样的原始字符串类型就好了,但不幸的是它并没有。


0
尝试按照以下方式替换:
System.out.println("before " + json + " after " + json.replace("\\", ""));

输出为:

before String json = \"key\":valuea\/b"; after String json = "key":valuea/b";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接