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

Posted

技术标签:

【中文标题】Java:将 \\" 替换为 " 和 \\/ 替换为 /【英文标题】:Java : Replace \" with " and \/ with /Java:将 \" 替换为 " 和 \/ 替换为 / 【发布时间】:2015-01-14 02:53:53 【问题描述】:

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

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

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

谢谢:)

【问题讨论】:

【参考方案1】:
    你要匹配的内容:\" 反斜杠是正则表达式特殊字符(用于转义),因此您需要转义它们:\\" 反斜杠也是字符串中的Java特殊字符(也用于转义),因此需要对其进行转义:\\\\" 在 Java 中也需要转义双引号(因为它是字符串文字分隔符):\\\\\"

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

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

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

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

组合成一个单一的正则表达式:

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

【讨论】:

@hqt:这个答案比我的更优雅,请考虑接受它。 @TimPietzcker 是的。 spOOm 解决方案很优雅,但对新手来说不是那么直观,但他已经很好地解释了如何去最后一点。只是因为你先发帖了 :D 谢谢你通知我 :)【参考方案2】:

尝试如下替换:

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

输出是:

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

【讨论】:

【参考方案3】:

欢迎来到 Java 反斜杠地狱:

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

在正则表达式中,\\ 匹配单个 \ 字符,而在字符串(您从中构建正则表达式)中,您需要为每个文本 "\" 编写 "\\",因此您需要四个您希望通过正则表达式匹配的每个实际反斜杠的反斜杠。

如果 Java 有文字正则表达式类型(如 Ruby、Perl 或 javascript)或逐字字符串类型(如 C# 或 Python),那就太好了,但不幸的是,它没有。

【讨论】:

以上是关于Java:将 \" 替换为 " 和 \/ 替换为 /的主要内容,如果未能解决你的问题,请参考以下文章

编写一个java程序,实现将数组arr中索引位置是2的元素替换为bb,并将替换前数组中的元素和替换

1.java编程将从键盘输入文本中的子字符串“word”替换为字符串“world”,并删除所有的子字符串“this”

VB代码(将字符串中的字符s替换为字符t)

如何将替换 \" 替换为 '

将 \n", 替换为 ", [重复]

java如何实现替换指定位置的指定字符串的功能