Pregunta simple, pero apuesto a que preguntar aquí probablemente sea más sencillo que tratar de entender la documentación para MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
El valor observado es "12,345".
El valor deseado es "12345".
java
messageformat
Daniel Fortunov
fuente
fuente
String.valueOf(long)
fuente
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
Luché un poco con esto cuando traté de hacer patrones del "mundo real" con internacionalización, etc. Específicamente, tenemos la necesidad de usar un formato de "elección" donde la salida depende de los valores que se muestran, y para eso
java.text.ChoiceFormat
está.Aquí hay un ejemplo de cómo hacer esto:
Esto genera el siguiente resultado; Espero que sea útil para otros que están tratando de lograr el mismo tipo de cosas:
Como puede ver, el formato de "elección" nos permite elegir el tipo de formato que se utilizará en función del valor que se va a pasar a formatear. Los números pequeños se pueden reemplazar con texto (no se muestra el valor original). Los números de tamaño mediano se muestran sin separadores de agrupación (sin comas). Los números más grandes incluyen las comas, nuevamente. Obviamente, este es un ejemplo totalmente artificial para demostrar la flexibilidad de
java.text.MessageFormat
.Una nota sobre lo citado
#
en el formato de texto: dado que ambosChoiceFormat
yMessageFormat
se están utilizando, existe una colisión entre metacaracteres entre los dos.ChoiceFormat
usos#
como un meta que esencialmente significa "igual" para que el motor de formatear sabe que por ejemplo en el caso de1#one!
que estamos comparando{0}
con1
, y si son iguales, se utiliza esa "elección" en particular.Pero
#
tiene otro significado paraMessageFormat
, y eso es como un metacarácter que tiene significado paraDecimalFormat
: es un metacarácter que significa "poner un número aquí".Debido a que está envuelto en una
ChoiceFormat
cadena,#
es necesario citarlo. CuandoChoiceFormat
termina de analizar la cadena, esas comillas se eliminan al pasar los subformatos aMessageFormat
(y luego aDecimalFormat
).Entonces, cuando está usando
{0,choice,...}
, debe citar esos#
caracteres, y posiblemente otros.fuente
El camino más corto es
fuente
new StringBuilder("").append(foo).toString()
lo que no es realmente óptimo.""+
Long.toString()
ya que es lo que esta solución usa en segundo plano de todos modos :)Como alternativa
String.format
yjava.util.Formatter
podría funcionar para usted también ...fuente
Tu podrías intentar:
fuente