我可以在java MessageFormat中转义大括号吗?

时间:2009-07-27 08:39:15

标签: java escaping messageformat

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

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

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

5 个答案:

答案 0 :(得分:86)

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

'{'return {2};'}'

有关详细信息,请参阅here

答案 1 :(得分:16)

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

  

String 中,"''"代表一个   单引号。 QuotedString 可以   包含任意字符除外   单引号;周围的单身   引号被删除。 UnquotedString   可以包含任意字符   除了单引号和左卷曲   括号。因此,应该是一个字符串   导致格式化的消息   "'{0}'"可以写成"'''{'0}''"   或"'''{0}'''"

答案 2 :(得分:12)

使用单引号:

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

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

  

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

单引号'',转义大括号为'{',结束大括号为0'}',大括号为''收尾报价。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您可以将此正则表达式与Pearl或任何其他语言一起使用,以转义大括号和单引号(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'