¿Puedo escapar de llaves en un MessageFormat java?
escaping (5)
Quiero mostrar algunas llaves en un MessageFormat java. Por ejemplo, sé que lo siguiente no funciona:
MessageFormat.format(" public {0} get{1}() {return {2};}/n/n", type, upperCamel, lowerCamel);
¿Hay alguna forma de escapar de los tirantes que rodean "return {2}"?
Guau. ¡Sorpresa! La documentación para MessageFormat conoce la respuesta:
Dentro de una cadena ,
"''''"
representa una comilla simple. Un QuotedString puede contener caracteres arbitrarios excepto comillas simples; las comillas simples que rodean se eliminan. Un UnquotedString puede contener caracteres arbitrarios, excepto comillas simples y corchetes a la izquierda. Por lo tanto, una cadena que debe dar como resultado el mensaje con formato"''{0}''"
se puede escribir como"''''''{''0}''''"
o"''''''{0}''''''"
.
Puede ponerlos dentro de comillas simples, por ejemplo
''{''return {2};''}''
Vea here para más detalles.
Utilice comillas simples:
MessageFormat.format(" public {0} get{1}() ''{''return {2};''}''/n/n",
type, upperCamel, lowerCamel);
Si desea utilizar realmente una sola cita, solo doble. El MessageFormat da este ejemplo un tanto complicado:
Por lo tanto, una cadena que debe dar como resultado el mensaje con formato
"''{0}''"
se puede escribir como"''''''{''0}''''" or "''''''{0}''''''"
.
Esto es ''''
para una sola cita, luego ''{''
para una llave de escape, luego 0
, ''}''
para la llave de cierre y ''''
para la cita de cierre.
puede utilizar esta expresión regular con Pearl o cualquier otro lenguaje para escapar de los corchetes y las comillas simples (x27). No toca ningún marcador de posición, por ejemplo, {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''
System.out.println(MessageFormat.format("I want to see ticks and curly braces around ''''''{''{0}''}''''''", "this"));