我在我的strings.xml文件中存储SQL查询,我想使用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语句?
答案 0 :(得分:785)
要转义%
,您需要将其加倍:%%
。
答案 1 :(得分:11)
要补充之前提出的解决方案,请使用:
str = str.replace("%", "%%");
答案 2 :(得分:0)
这是一个更强大的正则表达式替换,它不会替换已经在输入中加倍的%%。
str = str.replaceAll("(?:[^%]|\\A)%(?:[^%]|\\z)", "%%");
答案 3 :(得分:-3)
我现在不能相信这不是一个简单的解决问题,但是,嘿,这是我的抨击
(?:[^%]|^)(?:(%%)+|)(%)(?:[^%])
要在将消息传递给String.format之前清理消息,可以使用以下
Pattern p = Pattern.compile("(?:[^%]|^)(?:(%%)+|)(%)(?:[^%])");
Matcher m1 = p.matcher(log);
StringBuffer buf = new StringBuffer();
while (m1.find())
m1.appendReplacement(buf, log.substring(m1.start(), m1.start(2)) + "%%" + log.substring(m1.end(2), m1.end()));
// Return the sanitised message
String escapedString = m1.appendTail(buf).toString();
请注意,这适用于任意数量的格式化字符,因此它将%%替换为%%,%%%替换为%%%%,%%% %%替换为%%%%%%等。
它会留下任何已经转义过的字符(例如%%,%%%%等)