web-dev-qa-db-fra.com

Puis-je échapper des accolades dans un MessageFormat Java?

Je souhaite générer des accolades dans un MessageFormat Java. Par exemple, je sais que ce qui suit ne fonctionne pas:

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

Existe-t-il un moyen d'échapper aux accolades entourant "return {2}"?

57
Steve Bosman

Vous pouvez les mettre entre guillemets simples, par exemple.

'{'return {2};'}'

Voir ici pour plus de détails.

78
Brian Agnew

Sensationnel. Surprise! La documentation de MessageFormat connaît la réponse:

Dans String, "''" représente un simple citation. Un QuotedString can contient des caractères arbitraires sauf Guillemets simples; le single environnant les citations sont supprimées. Un UnquotedString peut contenir des caractères arbitraires sauf les guillemets simples et gauche frisée supports. Ainsi, une chaîne qui devrait donner le message formaté "'{0}'" peut être écrit en tant que "'''{'0}''" ou "'''{0}'''".

16
Bombe

Utilisez des guillemets simples:

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

Si vous voulez utiliser un seul guillemet, doublez-le. Le JavaDoc pour MessageFormat donne cet exemple un peu compliqué:

Ainsi, une chaîne qui devrait aboutir à le message formaté "'{0}'" peut être écrit en tant que "'''{'0}''" or "'''{0}'''".

Il s'agit de '' pour un seul devis, puis '{' pour une accolade échappée, puis 0, '}' pour l'accolade fermante et '' pour le devis fermant.

10
Jon Skeet
System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));
1
Victor Rodriguez

vous pouvez utiliser cette expression régulière avec pearl ou tout autre langage pour échapper aux accolades et aux guillemets simples (x27). Il ne touche aucun espace réservé, par exemple {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'

0