web-dev-qa-db-fra.com

Formatez un message à l'aide de MessageFormat.format () dans Java

J'ai stocké des messages dans un ensemble 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.-à-d. Le message réel, est stocké dans un fichier de propriétés qui est en quelque sorte récupéré.

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

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

L'espace réservé 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 bien que cela n'ait pas fonctionné. Quels changements sont nécessaires pour que cela fonctionne?

53
Tiny

Ajouter une apostrophe supplémentaire ' au MessageFormat pattern String pour assurer le ' le caractère est affiché

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

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

Une citation unique elle-même doit être représentée par des guillemets simples doublés '' tout au long d'une chaîne.

Le StringYou\\'re équivaut à ajouter un caractère barre oblique inverse au String. La seule différence sera donc que You\re sera produit plutôt que Youre. (avant solution de double devis '' appliqué)

98
Reimeus

Assurez-vous simplement que vous avez utilisé la double apostrophe ('')

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

Modifier:

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

Toute citation sans correspondance est traitée comme fermée à la fin du modèle donné. Par exemple, la chaîne de modèle " ' {0}" est traitée comme un modèle "' {0} ' ".

Source http://docs.Oracle.com/javase/7/docs/api/Java/text/MessageFormat.html

9
Adhikari

Vous devez utiliser une double apostrophe au lieu de single dans le "Vous êtes", par exemple:

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

Pour tous ceux qui ont Android des problèmes dans le fichier string.xml, utilisez\'\' au lieu de guillemets simples.

3
Uriel Frankel

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

1
T Efron