Могу ли я избежать скобок в Java MessageFormat?

Я хочу вывести некоторые фигурные скобки в формате Java MessageFormat. Например, я знаю, что следующее не работает:

MessageFormat.format("  public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel);

Есть ли способ избежать скобок, окружающих "return {2}"?

5 ответов

Решение

Вы можете поместить их в одинарные кавычки, например

'{'return {2};'}'

Смотрите здесь для более подробной информации.

Вот это да. Сюрприз! Документация для MessageFormat знает ответ:

Внутри строки, "''" представляет одну цитату. QuotedString может содержать произвольные символы, кроме одинарных кавычек; окружающие одинарные кавычки удаляются. UnquotedString может содержать произвольные символы, кроме одинарных кавычек и левых фигурных скобок. Таким образом, строка, которая должна приводить к форматированному сообщению "'{0}'" можно записать как "'''{'0}''" или же "'''{0}'''",

Используйте одинарные кавычки:

MessageFormat.format("  public {0} get{1}() '{'return {2};'}'\n\n",
                     type, upperCamel, lowerCamel);

Если вы хотите использовать одинарную кавычку, просто удвойте ее. JavaDoc дляMessageFormat дает этот несколько сложный пример:

Таким образом, строка, которая должна приводить к форматированному сообщению "'{0}'" можно записать как "'''{'0}''" or "'''{0}'''",

Это '' за одну цитату, то '{' для сбежавшей скобки, то 0, '}' для закрывающей скобки и '' для заключительной цитаты.

System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));

Вы можете использовать это регулярное выражение с жемчужиной или любым другим языком, чтобы убрать фигурные скобки и одинарные кавычки (x27). Это не касается любого заполнителя, например {0}:bash echo "# 'single' quote test \n\n public {0} get{1}() {return {2};}\n\n" | perl -pe 's/\x27/\x27\x27/g; s/\{([^0-9])/\x27\{\x27$1/g; s/([^0-9])\}/$1\x27\}\x27/g'

Другие вопросы по тегам