studio strings resource quantity obtener from array java android string syntax

java - resource - strings xml



¿Cómo escapar% en String.Format? (4)

Estoy almacenando una consulta SQL en mi archivo strings.xml y quiero usar String.Format para construir la cadena final en código. La instrucción SELECT usa un like, algo como esto:

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

Con el fin de dar formato, sustituyo ''algo'' con% 1 $ s para que se convierta en:

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

Me escapo de las comillas simples con la barra invertida. Sin embargo no puedo escapar del signo%.

¿Cómo puedo incluir una declaración similar en mi archivo strings.xml?


Este es un reemplazo de expresiones regulares más fuerte que no reemplazará %% que ya se duplicó en la entrada.

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


No puedo creer que este no sea un problema resuelto por ahora, pero oye, aquí está mi intento.

(?:[^%]|^)(?:(%%)+|)(%)(?:[^%])

Para sanear el mensaje antes de pasarlo a String.format, puede usar lo siguiente

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();

Tenga en cuenta que esto funciona con cualquier número de caracteres de formato, por lo que reemplazará% con %%, %%% con %%%%, %%%%% con %%%%%% etc.

Dejará solos los caracteres ya escapados (por ejemplo, %%, %%%% etc.)


Para complementar la solución mencionada anteriormente, use:

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


Para escapar % , necesitarás duplicarlo: %% .