Простой вопрос, но готов поспорить, что задать вопрос здесь, вероятно, будет проще, чем пытаться понять документацию для MessageFormat
:
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
Наблюдаемое значение составляет «12 345».
Желаемое значение - «12345».
java
messageformat
Даниэль Фортунов
источник
источник
String.valueOf(long)
источник
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
Я немного боролся с этим, пытаясь создать шаблоны «реального мира» с интернационализацией и т. Д. В частности, нам необходимо использовать формат «выбора», в котором вывод зависит от отображаемых значений, и это то
java.text.ChoiceFormat
, для чего.Вот пример того, как это сделать:
Это генерирует следующий вывод: Я надеюсь, что это будет полезно для тех, кто пытается делать то же самое:
Как видите, формат «выбора» позволяет нам выбирать тип используемого формата в зависимости от передаваемого значения для форматирования. Маленькие числа можно заменить текстом (исходное значение не отображается). Числа среднего размера показаны без разделителей групп (без запятых). И снова самые большие числа включают запятые. Очевидно, что это полностью надуманный пример, демонстрирующий гибкость
java.text.MessageFormat
.Замечание о цитировании
#
в тексте формата: поскольку используются обаChoiceFormat
иMessageFormat
, существует конфликт между метасимволами между ними.ChoiceFormat
использует в#
качестве метасимвола , что по существу означает «равно» , так что форматирование двигатель знает , что , например , в случае1#one!
мы сравниваем{0}
с1
, и если они равны, он использует этот конкретный «выбор».Но
#
имеет другое значениеMessageFormat
, и это как метасимвол, который имеет значение дляDecimalFormat
: это метасимвол, который означает «поставить здесь число».Поскольку он заключен в
ChoiceFormat
строку,#
необходимо заключить в кавычки. ПоChoiceFormat
завершении синтаксического анализа строки эти кавычки удаляются при передаче подформатов вMessageFormat
(а затем вDecimalFormat
).Поэтому, когда вы используете
{0,choice,...}
, вы должны цитировать эти#
символы и, возможно, другие.источник
Самый короткий путь - это
источник
new StringBuilder("").append(foo).toString()
поэтому это не совсем оптимально.""+
Long.toString()
поскольку это решение в любом случае использует в фоновом режиме :)В качестве альтернативы
String.format
иjava.util.Formatter
может работать для вас , а также ...источник
Вы можете попробовать:
источник