java escaping messageformat

¿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"));