75

我想在 java MessageFormat 中输出一些大括号。例如,我知道以下不起作用:

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

有没有办法逃避“return {2}”周围的大括号?

4

5 回答 5

109

您可以将它们放在单引号内,例如

'{'return {2};'}'

有关更多详细信息,请参见此处

于 2009-07-27T08:42:42.470 回答
19

哇。惊喜!MessageFormat的文档知道答案:

String中,"''"表示单引号。QuotedString可以包含除单引号外的任意字符周围的单引号被删除。UnquotedString可以包含除单引号 左大括号外的任意字符。因此,应该产生格式化消息的字符串 "'{0}'"可以写为"'''{'0}''""'''{0}'''"

于 2009-07-27T08:43:18.057 回答
14

使用单引号:

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

如果您想实际使用单引号,只需将其加倍即可。JavaDoc forMessageFormat给出了这个有点复杂的例子:

因此,应该导致格式化消息的字符串"'{0}'"可以写为"'''{'0}''" or "'''{0}'''".

这是''单引号,然后'{'是转义大括号,然后0'}'右大括号和''右引号。

于 2009-07-27T08:43:08.010 回答
2
System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));
于 2012-07-05T22:33:15.187 回答
-3

您可以将此正则表达式与 perl 或任何其他语言一起使用来转义大括号和单引号 (x27)。它不会触及任何占位符,例如{0}

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'
于 2018-10-08T11:58:38.870 回答