ChatGPT解决这个技术问题 Extra ChatGPT

如何在 String.Format 中转义 %?

我将 SQL 查询存储在我的 strings.xml 文件中,并且我想使用 String.Format 在代码中构建最终字符串。 SELECT 语句使用类似这样的语句:

SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'

为了格式化我用 %1$s 替换 'something' 所以它变成:

SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'

我用反斜杠转义单引号。但是我无法逃脱 % 符号。

如何在我的 strings.xml 文件中包含 like 语句?

不要忘记正确转义 %s。
他们会注入自己的数据库,这里不用担心;)
好吧,即使是你自己的数据库,也有可能不小心写出做坏事的查询。或者只是编写不编译的查询。准备查询是一个好习惯。
尽管它比 String.format() 慢,但您可以考虑改用 MessageFormat()

T
Tim Cooper

要转义 %,您需要将其加倍:%%


C
Cavaleiro

要补充上述解决方案,请使用:

str = str.replace("%", "%%");

这将取代已经翻倍的 %。请阅读另一个答案。
@Toilal为什么有人会逃脱已经逃脱的东西?如果他愿意,为什么不实际去做呢?也许他打算有两个 % 符号,所以正确的转义形式是 '%%%%'
T
Toilal

这是一个更强大的正则表达式替换,它不会替换输入中已经加倍的 %% 。

str = str.replaceAll("(?:[^%]|\\A)%(?:[^%]|\\z)", "%%");