Java добавляет начальные нули в число
Мне нужно вернуть строку в виде xxx-xxxx, где xxx - число, а xxxx - другое число, однако, когда у меня есть ведущие нули, они исчезают. Я пытаюсь использовать число форматер, но он не работает.
public String toString(){
NumberFormat nf3 = new DecimalFormat("#000");
NumberFormat nf4 = new DecimalFormat("#0000");
if( areaCode != 0)
return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
else
return exchangeCode + "-" + number;
}
}
Я понял:
public String toString(){
NumberFormat nf3 = new DecimalFormat("000");
NumberFormat nf4 = new DecimalFormat("0000");
if( areaCode != 0)
//myFormat.format(new Integer(someValue));
return nf3.format(new Integer(areaCode)) + "-" + nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
else
return nf3.format(new Integer(exchangeCode)) + "-" + nf4.format(new Integer(number));
}
Ответы
Ответ 1
Когда areaCode равен 0, вы забудете позвонить format
! Кроме этого, все выглядит отлично. Ведущие "#" не нужны, но не будут создавать никаких проблем для допустимых входов.
Я просто попробовал это, чтобы проверить, и это сработало для меня.
public static String formatTest(int areaCode, int exchangeCode, int number) {
DecimalFormat nf3 = new DecimalFormat("#000");
DecimalFormat nf4 = new DecimalFormat("#0000");
if( areaCode != 0)
return nf3.format(areaCode) + "-" + nf3.format(exchangeCode) + "-" + nf4.format(number);
else
return nf3.format(exchangeCode) + "-" + nf4.format(number);
}
public static void main(String[] args) {
System.out.println(formatTest(12, 90, 8));
System.out.println(formatTest(1, 953, 1932));
}
Вывод:
012-090-0008
001-953-1932
Ответ 2
Там возможно более элегантное решение:
String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)
Ответ 3
Удалите знак #
http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html
Этот код:
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Test
{
public static void main(String[] args)
{
int areaCode = 123;
int exchangeCode = 456;
NumberFormat nf3 = new DecimalFormat("0000");
System.out.println(nf3.format(areaCode) + "-" + nf3.format(exchangeCode) );
}
}
Производит этот вывод:
0123-0456
Ответ 4
Я бы рекомендовал использовать NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)
По-моему, это дает лучшую читаемость. А также минимизирует вероятность ошибок, когда вы помещаете неправильную строку в DecimalFormat.
final int value1 = 1;
final double value2 = 4.2;
NumberFormat nf = NumberFormat.getInstance(Locale.US);
nf.setMinimumIntegerDigits(2);
System.out.println(nf.format(value1));
System.out.println(nf.format(value2));
Вывод:
01
04.2
(Locale является необязательным, но я рекомендую его, когда вы работаете с международной командой. Значение по умолчанию - это локальные настройки)
В любом случае NumberFormat таким образом является такой замечательной вещью, особенно если вам приходится иметь дело с разными странами или такими вещами, как процент или валюта.