strings.xml 파일에 SQL 쿼리를 저장하고 String.Format
있으며 코드에서 최종 문자열을 작성하는 데 사용하고 싶습니다 . 이 SELECT
문장은 다음과 같은 것을 사용합니다.
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'
‘something’을 % 1 $ s로 바꾸는 형식을 지정하려면 다음과 같이하십시오.
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'
백 슬래시로 작은 따옴표를 이스케이프 처리합니다. 그러나 % 기호를 벗어날 수 없습니다.
strings.xml 파일에 like 문을 어떻게 포함시킬 수 있습니까?
답변
탈출하려면 %
두 배로 늘려야합니다 %%
.
답변
앞에서 설명한 솔루션을 보완하려면 다음을 사용하십시오.
str = str.replace("%", "%%");
답변
이것은 입력에서 이미 두 배가 된 %%를 대체하지 않는 강력한 정규식 대체입니다.
str = str.replaceAll("(?:[^%]|\\A)%(?:[^%]|\\z)", "%%");
답변
다음은 이미 이스케이프 된 문자열에서 여러 %를 이스케이프 해야하는 경우 옵션입니다.
(?:[^%]|^)(?:(%%)+|)(%)(?:[^%])
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();
이것은 여러 형식의 문자와 함께 작동하므로 %를 %%로, %%%를 %%%%로, %%%%%를 %%%%%% 등으로 대체합니다.
이미 이스케이프 된 문자 만 남겨 둡니다 (예 : %%, %%%% 등).