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.ChoiceFormatestá.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 ambosChoiceFormatyMessageFormatse están utilizando, existe una colisión entre metacaracteres entre los dos.ChoiceFormatusos#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
ChoiceFormatcadena,#es necesario citarlo. CuandoChoiceFormattermina 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.formatyjava.util.Formatterpodría funcionar para usted también ...fuente
Tu podrías intentar:
fuente