Question simple, mais je parie que demander ici sera probablement plus simple que d'essayer de comprendre la documentation pour MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
La valeur observée est "12 345".
La valeur souhaitée est "12345".
java
messageformat
Daniel Fortunov
la source
la source
String.valueOf(long)
la source
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
J'ai eu un peu de mal avec cela en essayant de faire des modèles «du monde réel» avec l'internationalisation, etc. Plus précisément, nous avons besoin d'utiliser un format de «choix» où la sortie dépend des valeurs affichées, et c'est à cela que
java.text.ChoiceFormat
sert.Voici un exemple pour y parvenir:
Cela génère la sortie suivante; J'espère que cela sera utile pour les autres qui essaient d'accomplir les mêmes types de choses:
Comme vous pouvez le voir, le format "choix" nous permet de choisir le type de format à utiliser en fonction de la valeur transmise à formater. Les petits nombres peuvent être remplacés par du texte (pas d'affichage de la valeur d'origine). Les nombres de taille moyenne sont affichés sans séparateurs de regroupement (sans virgules). Les plus grands nombres incluent à nouveau les virgules. De toute évidence, il s'agit d'un exemple entièrement artificiel pour démontrer la flexibilité de
java.text.MessageFormat
.Une note à propos de la citation
#
dans le format texte: puisque les deuxChoiceFormat
etMessageFormat
sont utilisés, il y a une collision entre les métacaractères entre les deux.ChoiceFormat
utilise#
comme métacaractère qui signifie essentiellement "égal" pour que le moteur de formatage sache que, par exemple, dans le cas où1#one!
nous comparons{0}
avec1
, et s'ils sont égaux, il utilise ce "choix" particulier.Mais
#
a une autre significationMessageFormat
, et c'est comme un métacaractère qui a un sens pourDecimalFormat
: c'est un métacaractère qui signifie "mettre un nombre ici".Parce qu'il est enveloppé dans une
ChoiceFormat
chaîne, le#
doit être entre guillemets. Lorsque l'ChoiceFormat
analyse de la chaîne est terminée, ces guillemets sont supprimés lors du passage des sous-formats àMessageFormat
(puis àDecimalFormat
).Ainsi, lorsque vous utilisez
{0,choice,...}
, vous devez citer ces#
caractères, et éventuellement d'autres.la source
Le moyen le plus court est
la source
new StringBuilder("").append(foo).toString()
sorte que ce n'est pas vraiment optimal.""+
Long.toString()
car c'est ce que cette solution utilise de toute façon en arrière-plan :)Comme alternative
String.format
etjava.util.Formatter
pourrait fonctionner pour vous aussi ...la source
Tu pourrais essayer:
la source