我可以在 java 消息格式中转义大括号吗?

我想输出一些大括号在 java 消息格式。例如,我知道下面的不工作:

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

是否有方法可以避免使用围绕“ return {2}”的大括号?

38597 次浏览

你可以把它们放在单引号里。

'{'return {2};'}'

有关详细信息,请参阅 给你

使用单引号:

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

如果你想实际上 使用一个单引号,只要加倍它。 用于 MessageFormat的 JavaDoc给出了这个有点复杂的例子:

因此,应该导致 格式化消息 "'{0}'"可以是 写成 "'''{'0}''" or "'''{0}'''"

对于单引号是 '',对于转义大括号是 '{',对于结束大括号是 0,对于结束引号是 '}',对于结束引号是 ''

哇,惊喜! 消息格式的文档知道答案:

绳子中,"''"表示一个 单引号。一个 QuotedString可以 包含任意字符,除非 单引号; 周围的单引号 引号被删除。一个 无引号字符串 可以包含任意字符 除了单引号和左曲线 因此,一个字符串应该 产生格式化的消息 "'{0}'"可以写成 "'''{'0}''""'''{0}'''"

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

您可以将这个 regex 与 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'