Java将'(撇号/单引号)和\(反斜杠)一起替换为问题

时间:2011-06-06 21:32:27

标签: java string replace escaping backslash

我似乎遇到了问题。我有一个查询字符串,其值可以包含单引号。这将破坏查询字符串。所以我尝试进行替换以将'更改为\'

以下是示例代码:

"This is' it".replace("'", "\'");

此输出仍为:

"This is' it".

它认为我只是为报价做一个转义字符。

所以我尝试了这两段代码:

"This is' it".replace("'", "\\'");  // \\ for the backslash, and a ' char
"This is' it".replace("'", "\\\'"); // \\ for the backslash, and \' for the ' char

以上两个STILL都会产生相同的输出:

"This is' it"

我似乎只能通过以下方式实现斜杠:

"This is' it".replace("'", "\\\\'");

结果是:

"This is\\' it"

有什么建议吗?我只想将'替换为\'

似乎不应该那么困难。

7 个答案:

答案 0 :(得分:33)

首先,如果您正在尝试使用querystrings编码撇号,则需要对其进行URLE编码,而不是使用前导反斜杠进行转义。对于那个用途URLEncoder.encode(String, String)(顺便说一下:第二个参数应该始终是"UTF-8")。其次,如果要使用反斜杠撇号替换所有的apostophe实例,则必须使用前导反斜杠转义字符串表达式中的反斜杠。像这样:

"This is' it".replace("'", "\\'");

编辑:

我现在看到您可能正在尝试动态构建SQL语句。 不要这样做。您的代码将容易受到SQL注入攻击。而是使用PreparedStatement

答案 1 :(得分:4)

使用"This is' it".replace("'", "\\'")

答案 2 :(得分:3)

我使用了一个技巧来处理撇号特殊字符。当替换'for'时,你需要在撇号之前放置四个反斜杠。

str.replaceAll("'","\\\\'");

答案 3 :(得分:1)

如果您想在JavaScript中使用它,那么您可以使用

str.replace("SP","\\SP");

但是在Java中

str.replaceAll("SP","\\SP");

将完美运作。

SP:特殊字符

否则你可以使用Apache的EscapeUtil。它会解决你的问题。

答案 4 :(得分:0)

我用过

str.replace("'", "");

替换我的字符串中的单引号。它对我来说很好。

答案 5 :(得分:0)

请记住stringToEdit.replaceAll(String, String) 返回结果字符串。它没有修改stringToEdit,因为字符串在Java中是不可变的。要做出任何改变,你应该使用

stringToEdit = stringToEdit.replaceAll("'", "\\'");

答案 6 :(得分:0)

示例:

String teste = " 'Bauru '";

teste = teste.replaceAll("  '  ","");
JOptionPane.showMessageDialog(null,teste);