簡體   English   中英

我可以在java MessageFormat中轉義大括號嗎?

[英]Can I escape braces in a java MessageFormat?

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

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

有沒有辦法逃避圍繞“返回{2}”的大括號?

你可以將它們放在單引號內,例如

'{'return {2};'}'

有關詳細信息,請參見此處

哇。 驚喜! MessageFormat的文檔知道答案:

字符串中"''"表示單引號。 QuotedString可以包含除單引號之外的任意字符; 周圍的單引號被刪除。 UnquotedString可以包含除單引號和左大括號之外的任意字符。 因此,應該導致格式化消息"'{0}'"的字符串可以寫為"'''{'0}''""'''{0}'''"

使用單引號:

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

如果你想實際使用單引號,只需加倍。 MessageFormatJavaDoc給出了一個有點復雜的例子:

因此,應該導致格式化消息"'{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' 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM