Могу ли я избежать скобок в 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'