我似乎遇到了问题。我有一个查询字符串,其值可以包含单引号。这将破坏查询字符串。所以我尝试进行替换以将'
更改为\'
。
以下是示例代码:
"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"
有什么建议吗?我只想将'
替换为\'
。
似乎不应该那么困难。
答案 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);