Java用'\''替换'''字符

时间:2012-10-18 18:17:44

标签: java string

我正在尝试将文本更新为MySql数据库。 该文本包含“标记。 作为示例字符串可能是Hello“world” 现在,当我写插入命令时,它的总和如

插入mytable('mystring')值(“Hello”world“”);

我正在使用java来执行这样的命令。显然,由于世界字符串中的双引号,这会产生错误。我尝试用java替换它 givenString.replaceAll("\"", "\\""); givenString.replace(Pattern.quote("\""), "\\"");

但没有任何作用。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

双重逃避\,如此:

givenString.replaceAll("\"", "\\\"");

正如Ted Hopp在评论中所说,要将数据插入表中,您应该使用参数准备语句,并根据您使用的API进行设置。例如,如果您使用的是JDBC,则可以使用setString对象的Statement方法。

String str = "Hello \"world";
PreparedStatement stmt = con.prepareStatement(
      "insert into mytable('column') values(?)");
stmt.setString(1, str);

关于您的第一条评论:

在Java中,字符串是不可变的,因此replaceAll返回一个新实例,其内容是具有所需替换的字符串。所以你想要的是再次将结果分配给前一个变量,如下所示:

public String getSqlLikeString(String givenString) {
   System.out.println(givenString); 
   givenString = givenString.replaceAll("\"", "\\\""); 
   System.out.println(givenString); 
   return givenString;
}

// or just
public String getSqlLikeString(String givenString) {
   return givenString.replaceAll("\"", "\\\"");
}

答案 1 :(得分:0)

尝试这样的事情:

    String s = "hello \"world\"";
    System.out.println(s);
    System.out.println(s.replace("\"", "\\\""));