Pergunta simples, mas aposto que perguntar aqui provavelmente será mais direto do que tentar entender a documentação para MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
O valor observado é "12.345".
O valor desejado é "12345".
java
messageformat
Daniel Fortunov
fonte
fonte
String.valueOf(long)
fonte
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
Lutei um pouco com isso ao tentar fazer padrões do "mundo real" com internacionalização, etc. Especificamente, precisamos usar um formato de "escolha" em que a saída dependa dos valores exibidos, e
java.text.ChoiceFormat
é para isso.Aqui está um exemplo de como fazer isso:
Isso gera a seguinte saída; Espero que seja útil para outras pessoas que estão tentando realizar os mesmos tipos de coisas:
Como você pode ver, o formato "escolha" nos permite escolher o tipo de formato a ser usado, dependendo do valor que está sendo passado para ser formatado. Números pequenos podem ser substituídos por texto (sem exibição do valor original). Números de tamanho médio são mostrados sem separadores de agrupamento (sem vírgulas). Os números maiores incluem vírgulas novamente. Obviamente, este é um exemplo totalmente artificial para demonstrar a flexibilidade de
java.text.MessageFormat
.Uma nota sobre a citada
#
no texto formato: uma vez que ambosChoiceFormat
eMessageFormat
estão sendo usados, há uma colisão entre metacharacters entre os dois.ChoiceFormat
usa#
como um metacaractere que significa essencialmente "iguais" para que o mecanismo de formatação saiba que, por exemplo, no caso de1#one!
comparações{0}
com1
, e se forem iguais, ele usa essa "escolha" específica.Mas
#
tem outro significado paraMessageFormat
, e isso é como um metacaractere que tem significado paraDecimalFormat
: é um metacaractere que significa "coloque um número aqui".Por estar embrulhado em uma
ChoiceFormat
sequência, é#
necessário citar. Quando aChoiceFormat
análise é feita, essas aspas são removidas ao passar os subformatos paraMessageFormat
(e depois paraDecimalFormat
).Então, quando você estiver usando
{0,choice,...}
, precisará citar esses#
caracteres e possivelmente outros.fonte
O caminho mais curto é
fonte
new StringBuilder("").append(foo).toString()
que não seja realmente ideal.""+
Long.toString()
uma vez que é o que esta solução usa no fundo de qualquer maneira :)Como alternativa
String.format
ejava.util.Formatter
pode funcionar para você também ...fonte
Você poderia tentar:
fonte