Can I escape braces in a java MessageFormat?
JavaEscapingMessageformatJava Problem Overview
I want to output some braces in a java MessageFormat. For example I know the following does not work:
MessageFormat.format(" public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel);
Is there a way of escaping the braces surrounding "return {2}"?
Java Solutions
Solution 1 - Java
Solution 2 - Java
Wow. Surprise! The documentation for MessageFormat knows the answer:
> Within a String, "''"
represents a
> single quote. A QuotedString can
> contain arbitrary characters except
> single quotes; the surrounding single
> quotes are removed. An UnquotedString
> can contain arbitrary characters
> except single quotes and left curly
> brackets. Thus, a string that should
> result in the formatted message
> "'{0}'"
can be written as "'''{'0}''"
> or "'''{0}'''"
.
Solution 3 - Java
Use single quotes:
MessageFormat.format(" public {0} get{1}() '{'return {2};'}'\n\n",
type, upperCamel, lowerCamel);
If you want to actually use a single quote, just double it. The JavaDoc for MessageFormat
gives this somewhat complicated example:
> Thus, a string that should result in
> the formatted message "'{0}'"
can be
> written as "'''{'0}''" or "'''{0}'''"
.
This is ''
for a single quote, then '{'
for an escaped brace, then 0
, '}'
for the closing brace and ''
for the closing quote.
Solution 4 - Java
System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));
Solution 5 - Java
you can use this regex with perl or any other language to escape curly brackets and single quotes (x27). It does not touch any placeholder e.g. {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'