Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 1.4 String.replaceAll单引号问题_Java_Json_String_Java1.4_Json Simple - Fatal编程技术网

Java 1.4 String.replaceAll单引号问题

Java 1.4 String.replaceAll单引号问题,java,json,string,java1.4,json-simple,Java,Json,String,Java1.4,Json Simple,我得到了一个来自数据库的字符串值,该值必须放入JSON中,但该值可以包含单引号和双引号。听起来很简单,对吧?显然不是在Java1.4.2中。不要让我开始解释为什么它必须是1.4.2,我从另一个开发人员那里继承了它,由于我无法控制的因素,我们还不能更新这个项目。:) 因此,我已经尝试了所有这些(以及许多其他只是为了看到结果): 我想要的只是示例用户的字符串,我做错了什么?可惜1.4.2没有String.replace(String,String)函数 Edit:我们使用的是json-simplej

我得到了一个来自数据库的字符串值,该值必须放入JSON中,但该值可以包含单引号和双引号。听起来很简单,对吧?显然不是在Java1.4.2中。不要让我开始解释为什么它必须是1.4.2,我从另一个开发人员那里继承了它,由于我无法控制的因素,我们还不能更新这个项目。:)

因此,我已经尝试了所有这些(以及许多其他只是为了看到结果):

我想要的只是
示例用户的字符串
,我做错了什么?可惜1.4.2没有String.replace(String,String)函数

Edit:我们使用的是
json-simple
json库,我正在查看生成的json字符串中上述命令的输出。我添加了额外的调试信息,以便在JSON获得输出之前查看值,看起来上面的命令确实有效,但是
JSON simple
库正在剥离转义字符

所以,我看到的是:

"sample user's string".replaceAll("'", "\\\\'")    // sample user\'s string
myJSONObject.put("value", "sample user's string".replaceAll("'", "\\\\'")) // sample user\\'s string"
myJSONObject.put("value", "sample user's string") // sample user's string

所以看起来图书馆的工作并不像预期的那样。使用过
json simple
的人知道这方面的解决方法吗?

我怀疑您在上下文中看到的字符串会自动转义反斜杠。你倒数第二个样品就可以了。例如:

public class Test {
    public static void main(String[] args) {
        System.out.println("sample user's string".replaceAll("'", "\\\\'"));
    }
}
印刷品:

sample user\'s string
您没有说在哪里查看该值,但如果它在调试器中,则很可能会将反斜杠加倍,以将该值表示为Java文本


不过,理想情况下,您不应该手动执行这类操作——这太容易出错。您应该使用一个JSON库来为您处理所有这些,所以您只需要指定值。

我怀疑您在上下文中查看的字符串会自动为您转义反斜杠。你倒数第二个样品就可以了。例如:

public class Test {
    public static void main(String[] args) {
        System.out.println("sample user's string".replaceAll("'", "\\\\'"));
    }
}
印刷品:

sample user\'s string
您没有说在哪里查看该值,但如果它在调试器中,则很可能会将反斜杠加倍,以将该值表示为Java文本


不过,理想情况下,您不应该手动执行这类操作——这太容易出错。您应该使用一个JSON库来处理所有这些,所以您只需要指定值。

我同意不需要手动完成。我们使用的是
json simple
json库(GSON库与Java 1.4.2不兼容),如果没有手动转义,库不会转义单引号。对问题细节进行编辑以反映这一点。@Kettch19:您如何诊断引用没有发生?如果你不小心,我可以很容易地看出这是一个诊断问题,而不是其他任何问题。或者json simple很聪明,只在必要时转义引号,例如,将包含单引号的字符串放入双引号字符串,反之亦然。我正在通过
log4j
输出查看跟踪。
json simple
调用正在转义其他字符,例如正斜杠,但由于某些原因,它没有对单引号执行任何操作。而且,事实上,当我把手动转义序列放进去的时候,它会避开手动转义序列。@Kettch19:为什么它会避开前斜杠?听起来很奇怪。听起来你可能想研究其他JSON API…是的,我不知道为什么…很奇怪,我必须进一步研究。这绝对是一个与JSON库相关的问题,而不是像最初认为的那样与JDK相关。谢谢你的帮助。我同意不需要手动完成。我们使用的是
json simple
json库(GSON库与Java 1.4.2不兼容),如果没有手动转义,库不会转义单引号。对问题细节进行编辑以反映这一点。@Kettch19:您如何诊断引用没有发生?如果你不小心,我可以很容易地看出这是一个诊断问题,而不是其他任何问题。或者json simple很聪明,只在必要时转义引号,例如,将包含单引号的字符串放入双引号字符串,反之亦然。我正在通过
log4j
输出查看跟踪。
json simple
调用正在转义其他字符,例如正斜杠,但由于某些原因,它没有对单引号执行任何操作。而且,事实上,当我把手动转义序列放进去的时候,它会避开手动转义序列。@Kettch19:为什么它会避开前斜杠?听起来很奇怪。听起来你可能想研究其他JSON API…是的,我不知道为什么…很奇怪,我必须进一步研究。这绝对是一个与JSON库相关的问题,而不是像最初认为的那样与JDK相关。谢谢你的帮助。