Экранирование одинарных кавычек для Java MessageFormat



Есть уже несколько вопросов о MessagingFormat в целом, но я еще не нашел ничего, что отвечает на мой вопрос.
Я знаю, что одиночные кавычки нарушат шаблон. Если вы используете MessageFormat или Log4j что-то вроде "doesn'T" может нарушить возможные заполнители.



См. внутри строки пара одинарных кавычек может использоваться для цитирования любых произвольных символов, кроме одинарных кавычек. Например, шаблон строки "'{0}'" представляет строку "{0}", не FormatElement. Сама одинарная кавычка должна быть представлена двойными одинарными кавычками " по всей строке .



Простой пример:



@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" для меня вместо предоставления моего собственного регулярного выражения...?

617   5  

5 ответов:

Это помогло мне сделать что-то вроде этого:

`doesn''t`

Рекомендация ICU состоит в том, чтобы использовать апостроф ASCII (' U+0027) только для экранирования символов синтаксиса и использовать красивую одинарную кавычку (’ U+2019) для фактических апостроф и одинарных кавычек в шаблоне сообщения.

Для всех, у кого есть Проблемы с Android в строке .xml , Используйте \ ' \ ' вместо одинарной кавычки.

Так как я не нашел другого API, который обеспечивал бы экранированную одиночную цитату ( '- > " ), я останусь со своим регулярным выражением.

Используйте метод escapeEcmaScript из пакета Apache Commons Lang.

См. вопросы переполнения стека:

Comments

    Ничего не найдено.