我正在创建要发送到服务器的json字符串。我使用GSon生成json字符串。因为我的服务器不理解字符串:\"key\":value
但"key":value
或"a\/b"
但a/b
。因此,在生成json字符串后,我使用replaceAll
方法来解决此问题:
String res = original.replaceAll("\\/", "/").replaceAll("\\"", "\"");
但这种方法并不像我预期的那样有效。请告诉我如何更换字符串以符合上述服务器。
谢谢:)
答案 0 :(得分:6)
\"
\\"
\\\\"
\\\\\"
您想要用双引号替换,因此需要再次应用第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";