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}"?
Vous pouvez les mettre entre guillemets simples, par exemple.
'{'return {2};'}'
Voir ici pour plus de détails.
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}'''"
.
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.
System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));
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'