Java将前导零添加到数字中

时间:2010-03-31 19:33:43

标签: java string number-formatting

我需要以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));
    }

5 个答案:

答案 0 :(得分:25)

有一个可以说是更优雅的解决方案:

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

答案 1 :(得分:18)

当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 :(得分:6)

删除#符号

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

答案 3 :(得分:3)

我建议使用NumberFormat(http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

在我看来,它提供了最好的可读性。并且当您将错误的String放入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是如此的好,特别是如果你必须处理不同的国家或事物,如百分比或货币

答案 4 :(得分:0)

您可以使用NumberFormat类,并将最小零设置为0 easliy,例如,对于货币格式,它就像一个超级字符一样工作:

   formatter = NumberFormat.getCurrencyInstance();
   formatter.setMinimumFractionDigits(0);
   -----------
   print ( formatter.format(119.00) ) ---> $119