2016-09-23 4 views
1

я столкнулся с проблемой сегодня со следующим кодом с помощью Spring:Каков эквивалент Pattern.quote() для MessageFormat?

String tabTitle = messageSource.getMessage(tabName, new Object[] {}, tabName, locale) 

Это используется, чтобы получить отображаемые заголовки ряда вкладок в верхней части нашего сайта (экземпляр uPortal). Проблема в том, что если tabName содержит одну цитату, она автоматически удаляется из результата. Например, What's For Lunch становится Whats For Lunch.

Я отследил почему, и это потому, что 3-й параметр в этом методе должен иметь формат, указанный в java.text.MessageFormat. Требуются 2 одинарные кавычки.

Поскольку мы не передаем какие-либо параметры в формате, я могу безопасно избегать любых специальных символов в tabName, прежде чем передавать его в качестве третьего параметра. Я мог бы вручную заменить одиночные кавычки двумя одинарными кавычками, но то, что мне действительно понравилось, это что-то вроде Pattern.quote(), только для языка MessageFormat, который гарантированно будет обрабатывать все экранирование. Есть ли что-нибудь подобное?

+1

Нет, но вы можете смело выполнять подстановку '' '' '' '', а затем вложить все это в одинарные кавычки. Удвоенные одиночные кавычки интерпретируются должным образом даже внутри текста с одним кавычком. – VGR

+0

Спасибо, если вы добавите это как ответ, я приму это. – xdhmoore

ответ

1

Для этого нет никакого метода, но включение всего текста в символы одной кавычки ASCII выполнит то же самое. Вы можете сделать ''' замену, как вы описали, затем окружите текст '. Из MessageFormat documentation:

Например, шаблон строки "'{''}'" интерпретируется как последовательность '{ (начало цитировании и левой фигурной скобки), '' (одинарной кавычки), и }' (правой фигурной скобкой и в конце котировки), не'{' и '}' (приведенные левые и правые фигурные скобки): обозначение строки "{'}", а не "{}".