88 votes

Formater un message à l'aide de MessageFormat.format() en Java

J'ai stocké quelques messages dans un paquet de ressources. J'essaie de formater ces messages comme suit.

import java.text.MessageFormat;

String text = MessageFormat.format("You're about to delete {0} rows.", 5);
System.out.println(text);

Supposons que le premier paramètre, c'est-à-dire le message réel, soit stocké dans un fichier de propriétés qui est récupéré d'une manière ou d'une autre.

Le deuxième paramètre, c'est-à-dire 5, est une valeur dynamique et doit être placé dans l'espace réservé. {0} ce qui n'est pas le cas. La ligne suivante s'imprime,

Vous êtes sur le point de supprimer {0} lignes.

Le caractère de remplacement n'est pas remplacé par le paramètre réel.


C'est l'apostrophe ici - You're . J'ai essayé d'y échapper comme d'habitude, comme You\\'re mais ça n'a pas marché. Quels sont les changements nécessaires pour que cela fonctionne ?

137voto

Reimeus Points 93429

Ajoutez une apostrophe supplémentaire ' à la MessageFormat motif String pour assurer la ' le caractère est affiché

String text = 
     java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
                                         ^

Une apostrophe (aka devis unique ) dans un modèle MessageFormat commence une chaîne entre guillemets et n'est pas interprétée seule. De la javadoc

Un guillemet simple doit être représenté par des guillemets simples doubles '' tout au long d'une chaîne.

Le site String You\\'re est équivalent à l'ajout d'un caractère antislash à l'élément String donc la seule différence sera que You\re sera produit plutôt que Youre . (avant la solution du guillemet double '' appliqué)

13voto

Adhikari Points 335

Assurez-vous juste d'avoir utilisé la double apostrophe ('')

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
System.out.println(text);

Edit :

Dans une chaîne de caractères, une paire de guillemets simples peut être utilisée pour citer n'importe quel caractère arbitraire, à l'exception des guillemets simples. Par exemple, la chaîne de caractères "'{0}'" représente la chaîne "{0}", et non un FormatElement. ...

Tout guillemet non apparié est traité comme fermé à la fin du motif donné. Par exemple, la chaîne de caractères " ' {0}" est traité comme le motif " ' {0} ' ".

Source : http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

6voto

FOOM Points 196

Vous devez utiliser une double apostrophe au lieu d'une simple dans le "Vous", par exemple :

String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
System.out.println(text);

5voto

T Efron Points 51

Utilisation d'une apostrophe (Unicode : \u2019 ) au lieu d'un guillemet simple ' a résolu le problème sans doubler le \' .

3voto

Uriel Frankel Points 2143

Pour tous ceux qui ont des problèmes avec Android dans le string.xml, utilisez '\'\' à la place du guillemet simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X