【问题标题】:Java replace ' " 'character with ' \" 'Java用'\"'替换'"'字符
【发布时间】:2012-10-18 18:17:43
【问题描述】:

我正在尝试将文本更新到 MySql 数据库中。 文本中包含 " 标记。 例如字符串可以是 Hello "world" 现在,当我编写插入命令时,它的总和就像

插入 mytable ('mystring') values("Hello "world"");

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

但没有任何效果。非常感谢任何帮助!

【问题讨论】:

  • 听起来像是参数绑定和准备好的语句的工作。
  • 谢谢让我试一试。
  • 注意,你可能想担心如果有人有点恶意提出` in the text. Or control characters, or whatever. Best stick with PreparedStatement 会发生什么。这通常是为了在生成任何文本格式时避免注入攻击。
  • 已准备好声明以进行救援。非常感谢您的帮助。

标签: java string


【解决方案1】:

像这样双重转义\

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

正如 Ted Hopp 在 cmets 中所说,为了将数据插入表中,您应该使用参数用户准备好的语句,并根据您使用的 API 设置它们。例如,如果您使用 JDBC,则可以使用 Statement 对象的 setString 方法。

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("\"", "\\\"");
}

【讨论】:

  • 我已经这样做了,但有些方法不起作用。这是我的代码public String GetSqlLikeString(String givenString){ System.out.println(givenString); givenString.replaceAll("\"", "\\\""); System.out.println(givenString); return givenString; } 我相信 java 编译器无法查找它或什么。
  • 是的,您对新实例的看法是正确的。原来givenstring = givenString.replaceall("\"","ab") 可以通过用字符串 ab 替换 " 来正常工作。但是 givenString = givenString.replaceAll("\"", "\\\""); 不会用 \" 替换所有 "
【解决方案2】:

试试这样的:

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

【讨论】:

  • 我从网络上得到一个字符串,基本上是一个 rss 提要。我打算将其更新到我的数据库中,这就是为什么需要添加转义字符。
猜你喜欢
  • 1970-01-01
  • 2021-01-27
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
相关资源
最近更新 更多