Java:替换\“with”和\ / with /

时间:2014-11-17 08:36:53

标签: java regex json gson replaceall

我正在创建要发送到服务器的json字符串。我使用GSon生成json字符串。因为我的服务器不理解字符串:\"key\":value"key":value"a\/b"a/b。因此,在生成json字符串后,我使用replaceAll方法来解决此问题:

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

但这种方法并不像我预期的那样有效。请告诉我如何更换字符串以符合上述服务器。

谢谢:)

3 个答案:

答案 0 :(得分:6)

  1. 您想要匹配的内容:\"
  2. 反斜杠是一个正则表达式特殊字符(用于转义),因此您需要转义它们:\\"
  3. 反斜杠也是字符串中的Java特殊字符(也用于转义),因此您需要转义它们:\\\\"
  4. 双引号也需要在Java中进行转义(因为它是字符串文字分隔符):\\\\\"
  5. 您想要用双引号替换,因此需要再次应用第4点:

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

    其他替换的逻辑相同(没有点#4,因为没有双引号):

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

    合并为一个正则表达式:

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

答案 1 :(得分:4)

欢迎使用Java反斜杠地狱:

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

在正则表达式中,\\匹配单个\字符,并且在字符串(您构建正则表达式)中,您需要为每个字面"\\""\" 1}},所以你需要通过正则表达式匹配每个实际反斜杠的四个反斜杠。

如果Java具有文字正则表达式类型(如Ruby,Perl或JavaScript)或逐字字符串类型(如C#或Python),那将会很好,但不幸的是,它没有。

答案 2 :(得分:0)

尝试替换如下:

System.out.println("before " + json + " after " + json.replace("\\", ""));

输出是:

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