Java MessageFormatで中括弧を出力したい。例えば、以下が機能しないことを知っている:
MessageFormat.format(" public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel);
「return {2}」を囲む中括弧をエスケープする方法はありますか?
ワオ。驚き! MessageFormat のドキュメントは答えを知っています:
String内で、
"''"
は一重引用符を表します。 QuotedStringには、単一引用符を除く任意の文字を含めることができます。周囲の単一引用符は削除されます。 UnquotedStringには、単一引用符と左中括弧を除く任意の文字を含めることができます。したがって、フォーマットされたメッセージ"'{0}'"
をもたらすはずの文字列は、"'''{'0}''"
または"'''{0}'''"
として記述できます。
単一引用符を使用します。
MessageFormat.format(" public {0} get{1}() '{'return {2};'}'\n\n",
type, upperCamel, lowerCamel);
実際に一重引用符を使用したい場合、二重引用符で囲みます。 MessageFormat
のJavaDoc は、このやや複雑な例を示しています。
したがって、フォーマットされたメッセージ
"'{0}'"
をもたらすはずの文字列は、"'''{'0}''" or "'''{0}'''"
と書くことができます。
これは、単一引用符の場合は''
、エスケープされたブレースの場合は'{'
、閉じ括弧の場合は0
、'}'
、閉じ引用符の場合は''
です。
System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));
この正規表現を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'