Einfache Frage, aber ich wette, dass das Fragen hier wahrscheinlich einfacher ist als der Versuch, die Dokumentation zu verstehen für MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
Der beobachtete Wert ist "12.345".
Gewünschter Wert ist "12345".
java
messageformat
Daniel Fortunov
quelle
quelle
String.valueOf(long)
quelle
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
Ich hatte ein wenig Probleme damit, als ich versuchte, "reale" Muster mit Internationalisierung usw. zu erstellen. Insbesondere müssen wir ein "Auswahl" -Format verwenden, bei dem die Ausgabe von den angezeigten Werten abhängt, und dafür
java.text.ChoiceFormat
ist es gedacht.Hier ist ein Beispiel, wie dies erreicht werden kann:
Dies erzeugt die folgende Ausgabe; Ich hoffe, es ist hilfreich für andere, die versuchen, die gleichen Dinge zu erreichen:
Wie Sie sehen können, können wir im Format "Auswahl" den zu verwendenden Formattyp in Abhängigkeit von dem zu formatierenden Wert auswählen. Kleine Zahlen können durch Text ersetzt werden (keine Anzeige des Originalwerts). Mittelgroße Zahlen werden ohne Gruppentrennzeichen (ohne Kommas) angezeigt. Die größten Zahlen enthalten wieder die Kommas. Offensichtlich ist dies ein völlig erfundenes Beispiel, um die Flexibilität von zu demonstrieren
java.text.MessageFormat
.Ein Hinweis zu dem
#
im Format zitierten Text: Da beideChoiceFormat
undMessageFormat
verwendet werden, kommt es zu einer Kollision zwischen Metazeichen zwischen den beiden.ChoiceFormat
Verwendungen#
als metacharacter , dass im Wesentlichen bedeutet „gleich“ , so dass die Formatierung Motor weiß , dass zum Beispiel im Fall1#one!
vergleichen wir{0}
mit1
, und wenn sie gleich sind, verwendet es diese bestimmte „Wahl“.Aber
#
hat eine andere BedeutungMessageFormat
, und das ist als Metazeichen, das Bedeutung hat fürDecimalFormat
: Es ist ein Metazeichen, das bedeutet "hier eine Zahl setzen".Da es in eine
ChoiceFormat
Zeichenfolge eingewickelt ist ,#
muss das in Anführungszeichen gesetzt werden. WennChoiceFormat
das Parsen der Zeichenfolge abgeschlossen ist, werden diese Anführungszeichen entfernt, wenn die Unterformate anMessageFormat
(und dann anDecimalFormat
) übergeben werden.Wenn Sie also verwenden
{0,choice,...}
, müssen Sie diese#
und möglicherweise andere Zeichen zitieren .quelle
Der kürzeste Weg ist
quelle
new StringBuilder("").append(foo).toString()
sodass es nicht wirklich optimal ist.""+
Long.toString()
da es das ist, was diese Lösung sowieso im Hintergrund verwendet :)Als Alternative
String.format
undjava.util.Formatter
könnte auch für Sie arbeiten ...quelle
Du könntest es versuchen:
quelle