Как настроить MessageFormat для номеров глобально

Я хотел бы изменить способ MessageFormat вывода чисел.

Integer foo = 99888;
String bar = MessageFormat.format("{0}", foo);

Наблюдаемое значение равно "99 888".

Желаемое значение "99888".

Что я мог бы сделать, так это:

String bar = MessageFormat.format("{0, number,#}", foo);

Проблема в том, что я должен изменить его в проекте с более чем 10 000 MessageFormat.format(). Так что это не совсем то, как я хотел бы это сделать.

Знаете ли вы, есть ли способ глобально изменить формат чисел, заданных для MessageFormat.format()?


person marcramser    schedule 13.07.2018    source источник
comment
статический строковый формат;   -  person Stultuske    schedule 13.07.2018
comment
Извините, я не понимаю, что вы хотите сказать   -  person marcramser    schedule 13.07.2018
comment
сохраните формат, который вы хотите использовать в своем классе, и примените его к каждому числу. если вы объявите его как статический, он будет (почти) глобальным   -  person Stultuske    schedule 13.07.2018
comment
Ну да, но тогда я должен коснуться каждого MessageFormat.format(), чего я хотел бы избежать.   -  person marcramser    schedule 13.07.2018
comment
@macramser эм ... почему? может быть, сейчас в первый раз, не было бы необходимости, если бы вы реализовали это раньше. и это избавит вас от необходимости делать это снова   -  person Stultuske    schedule 13.07.2018
comment
конечно, только в первый раз, но потом я все равно мог бы перейти на лучшую библиотеку форматирования. и, конечно, в этом не было бы необходимости, если бы я реализовал это раньше, но у меня есть (ну, не у меня, а у других людей из моей компании), так что это не очень помогает...   -  person marcramser    schedule 13.07.2018


Ответы (3)


Кроме написания очень странного аспекта, я не верю, что есть способ. Это цена, которую вы платите за использование static метода, который вы не можете изменить.

Я бы рассмотрел возможность внесения массовых изменений либо с помощью вашей любимой среды IDE, либо с помощью инструментов командной строки, например. sed. Если вы хотите изменить все вхождения {0} на {0,number,#}, этого должно быть достаточно, чтобы

sed -i -e 's/{0}/{0,number,#}/g' MyClass.java
person Karol Dowbecki    schedule 13.07.2018
comment
Ok. Ну, я не думаю, что смогу использовать sed или что-то подобное. Из-за того, что не все параметры являются числами... - person marcramser; 13.07.2018
comment
Числа имеют формат NumberFormat.getInstance(locale) (MessageFormat строка 1271), который в вашем случае использует Locale.getDefault(). Здесь не так много места для маневра. - person Karol Dowbecki; 13.07.2018

Короткое нет.

Я бы сохранил шаблон "{0, number,#}" в глобальной переменной, чтобы иметь что-то вроде «глобальной» настройки.

person Fred    schedule 23.07.2018

Я проверил это, и я получил,

bar = "99 888";

Так что я думаю, что это работает.

person A G    schedule 13.07.2018
comment
Это не проблема. Проблема в том, что я не хочу менять 10 000 строк кода. - person marcramser; 13.07.2018
comment
Я знаю, но когда вы сказали, что наблюдаемое значение равно 99 888. это кажется неправильным. В любом случае, я не знаю вашего проекта, поэтому вам придется уточнить. Это один файл из 10 000 строк? Разве вы не можете просто найти/заменить во всем своем проекте? - person A G; 13.07.2018
comment
Я думаю, что зависимость от настроек местоположения. Существует около 1000 классов, и не все параметры являются числами. - person marcramser; 13.07.2018