【问题标题】:Java String to Object getting unwanted '\'Java String to Object 得到不想要的 '\'
【发布时间】:2013-08-16 08:26:45
【问题描述】:

我正在构建一个MongoDB Java 查询,当我试图在我的数据库中查找一个特定值时,由于我的String 中有一些不需要的'\' 字符,查询变得一团糟。 这就是我正在做的事情。

我从mongodb 中得到一个字符串列表,然后我使用这些字符串在另一个集合中执行查找。

DBCursor = null;
for(String s : list){
 BasicDBOject query = = new BasicDBObject("actor.preferredUsername",  s);
 cursor = coll.find(query);
 //treat the results
 }

如果我使用查询执行System.out.println(),这就是我得到的:

 { "actor.preferredUsername" : "\"NapoleSunset75\""}

注意最后一个字段中的'\'

现在,出于测试目的,如果我将's' 更改为像"xpto" 这样的固定字符串,则会成功创建查询,并返回

 { "actor.preferredUsername" : "xpto"}

谁能帮忙?

【问题讨论】:

  • 当您将其存储在数据库中时,您似乎有多余的引号。
  • \ 正在转义“ - 实际问题是什么?
  • 打开 mongo shell,做同样的查询,现在看看 `\` 是否实际存储为一个值。
  • 在您的问题中包含确切的打印语句..
  • 谢谢@doctorlove,我看错了。将 " 替换为 null 即可。

标签: java string character-encoding extra


【解决方案1】:

我认为,这是由于要存储在数据库中的字符串中的额外引号引起的。如果是这样,你可以使用这个类,它是静态公共方法,在存储到数据库之前验证你的字符串:

public class SqlValidator {

private static final String SINGLE_QUOTE    = "\u0027";

    /**
     * It replaces all ' with ''. It should be used in read/write queries.
     * 
     * @param str
     */
    public static String quoteInQuery(String str) {
    if (str == null)
        return null;
    return str.replaceAll(SINGLE_QUOTE, SINGLE_QUOTE + SINGLE_QUOTE);
    }
}

【讨论】:

  • 谢谢,我现在开始工作了。我看错了,以为错误的字符是'\',而不是"。
猜你喜欢
  • 1970-01-01
  • 2015-01-07
  • 2014-05-08
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多