Экранирование одинарных кавычек для Java MessageFormat
Есть уже несколько вопросов о MessagingFormat в целом, но я еще не нашел ничего, что отвечает на мой вопрос.
Я знаю, что одиночные кавычки нарушат шаблон. Если вы используете MessageFormat или Log4j что-то вроде "doesn'T" может нарушить возможные заполнители.
Простой пример:
@Test
public void test() {
String pattern = "{0} doesn't show values ( {1}, {2}, {3}, {4} )";
final Object[] args = { "Testpattern", 100, 200, 300, 400 };
System.out.println(MessageFormat.format(pattern, args));
pattern = pattern.replaceAll("(?<!')'(?!')", "''");
System.out.println("Replaced singlequotes: " + MessageFormat.format(pattern, args));
}
Вывод:
Testpattern doesnt show values ( {1}, {2}, {3}, {4} )
Replaced singlequotes: Testpattern doesn't show values ( 100, 200, 300, 400 )
Таким образом, если я заменю все одиночные кавычки с помощью регулярного выражения , это будет работать. Я просто придумал регулярное выражение, пытаясь заменить только "single singlequotes", используя регулярное выражение lookahead/lookbehind.
Примеры замены регулярных выражений:
doesn't -> doesn''t
doesn''t -> doesn''t
doesn'''t -> doesn'''t
Мне просто интересно, есть ли какая-нибудь утилита apache-commons (или любая другая библиотека) существует, которая будет обрабатывать "escapeSingleQuotes" для меня вместо предоставления моего собственного регулярного выражения...?
5 ответов:
Рекомендация ICU состоит в том, чтобы использовать апостроф ASCII (' U+0027) только для экранирования символов синтаксиса и использовать красивую одинарную кавычку (’ U+2019) для фактических апостроф и одинарных кавычек в шаблоне сообщения.
Для всех, у кого есть Проблемы с Android в строке .xml , Используйте \ ' \ ' вместо одинарной кавычки.
Так как я не нашел другого API, который обеспечивал бы экранированную одиночную цитату ( '- > " ), я останусь со своим регулярным выражением.
Comments