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?
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 String
You\\'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é)
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
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);
Pour tous ceux qui ont Android des problèmes dans le fichier string.xml, utilisez\'\' au lieu de guillemets simples.
Utiliser une apostrophe ’
_ (Unicode: \u2019
) au lieu d'un guillemet simple '
résolu le problème sans doubler le \'
.