Как экранировать % в String.Format?
Я храню SQL-запрос в файле strings.xml и хочу использовать String.Format для формирования финальной строки в коде. Мой запрос SELECT использует оператор like, что-то вроде следующего:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'
Чтобы выполнить форматирование, я заменяю 'something' на %1$s, и он становится следующим:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'
Я экранирую одинарную кавычку с помощью обратной косой черты. Тем не менее, я не могу экранировать знак %.
Как я могу включить оператор like в файл strings.xml?
3 ответ(ов)
Чтобы экранировать символ %, нужно удвоить его: %%.
Чтобы дополнить ранее предложенное решение, используйте следующий код:
str = str.replace("%", "%%")
Этот метод заменит каждый символ % на %%, что может быть полезно при работе с форматированием строк, например, в контексте использования функции, которая обрабатывает строки с форматированными символами.
Ваша задача заключается в том, чтобы заменить одиночные символы % в строке на двойные %%, при этом не затрагивая уже существующие двойные %%. Для этого можно использовать следующий регулярное выражение:
str = str.replaceAll("(?:[^%]|\\A)%(?:[^%]|\\z)", "%%");
Разберём это регулярное выражение:
(?:[^%]|\\A)— Эта часть проверяет, чтобы перед символом%не было другого символа%, или чтобы он находился в начале строки (\\A).%— Это непосредственно символ, который мы хотим заменить.(?:[^%]|\\z)— Эта часть проверяет, чтобы после символа%не было другого символа%, или чтобы он находился в конце строки (\\z).
Таким образом, данное выражение успешно заменяет одиночные % на %%, игнорируя те %, которые уже являются частью двойного символа (%%). Если у вас ещё есть вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать!
Преобразование 'ArrayList<String>' в 'String[]' в Java
Как сгенерировать случайную алфавитно-цифровую строку
Использование контекста в фрагменте
Как преобразовать строку Java в byte[]?
Room - Директория экспорта схемы не указана аннотационному процессору, не удается экспортировать схему