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));
    }

4 ответов


когда 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

есть, пожалуй, более элегантное решение:

String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)

удалить # знак

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


Я бы рекомендовал использовать NumberFormat (http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html)

на мой взгляд, это дает лучшую читаемость. А также минимизирует возможность ошибок при вводе неправильной строки в десятичную форму.

  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

(Локаль необязательна, но я рекомендую ее при работе с международной командой. Значение по умолчанию-local настройки)

в любом случае NumberFormat таким образом, это такая отличная вещь, особенно если вам приходится иметь дело с разными странами или такими вещами, как процент или валюта