5

Как экранировать % в String.Format?

14

Я храню 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 ответ(ов)

12

Чтобы экранировать символ %, нужно удвоить его: %%.

0

Чтобы дополнить ранее предложенное решение, используйте следующий код:

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

Этот метод заменит каждый символ % на %%, что может быть полезно при работе с форматированием строк, например, в контексте использования функции, которая обрабатывает строки с форматированными символами.

0

Ваша задача заключается в том, чтобы заменить одиночные символы % в строке на двойные %%, при этом не затрагивая уже существующие двойные %%. Для этого можно использовать следующий регулярное выражение:

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

Разберём это регулярное выражение:

  • (?:[^%]|\\A) — Эта часть проверяет, чтобы перед символом % не было другого символа %, или чтобы он находился в начале строки (\\A).
  • % — Это непосредственно символ, который мы хотим заменить.
  • (?:[^%]|\\z) — Эта часть проверяет, чтобы после символа % не было другого символа %, или чтобы он находился в конце строки (\\z).

Таким образом, данное выражение успешно заменяет одиночные % на %%, игнорируя те %, которые уже являются частью двойного символа (%%). Если у вас ещё есть вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь