Java 1.4 String.replaceAll问题,带有单引号



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

所以,我尝试了所有这些(还有很多其他的只是为了看看结果):

"sample user's string".replaceAll("'", "'")      // returns "sample user's string"
"sample user's string".replaceAll("'", "\'")     // returns "sample user's string"
"sample user's string".replaceAll("'", "\'")    // returns "sample user's string"
"sample user's string".replaceAll("'", "\\'")   // returns "sample user\'s string"
"sample user's string".replaceAll("'", "%%")      // returns "sample user%%s string"

我只想要sample user's string,我做错了什么?糟糕的是1.4.2没有String.replace(String,String)函数。

编辑:我们使用的是json-simpleJSON库,我在生成的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库来处理所有这些,所以只需要指定值。

相关内容

  • 没有找到相关文章

最新更新