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

der*_*kmw 24 java string replace escaping backslash

我似乎遇到了问题.我有一个查询字符串,其值可以包含单引号.这将破坏查询字符串.所以,我试图做一个替代改变'\'.

这是一个示例代码:

"This is' it".replace("'", "\'");
Run Code Online (Sandbox Code Playgroud)

这个输出仍然是:

"This is' it".
Run Code Online (Sandbox Code Playgroud)

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

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

"This is' it".replace("'", "\\'");  // \\ for the backslash, and a ' char
"This is' it".replace("'", "\\\'"); // \\ for the backslash, and \' for the ' char
Run Code Online (Sandbox Code Playgroud)

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

"This is' it"
Run Code Online (Sandbox Code Playgroud)

我似乎只能通过以下方式实现这一点:

"This is' it".replace("'", "\\\\'");
Run Code Online (Sandbox Code Playgroud)

结果如下:

"This is\\' it"
Run Code Online (Sandbox Code Playgroud)

有什么建议?我只是想更换一个'\'.

它似乎不应该那么困难.

Asa*_*aph 33

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

"This is' it".replace("'", "\\'");
Run Code Online (Sandbox Code Playgroud)

编辑:

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

  • 您假设他的意思是HTTP查询字符串.他可能会.他可能不会. (3认同)

Mar*_*elo 5

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