17

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

5 回答 5

26

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

String.format("%03d-%03d-%04d", areaCode, exchangeCode, number)
于 2010-03-31T20:28:16.093 回答
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
于 2010-03-31T19:43:10.343 回答
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

于 2010-03-31T19:37:00.533 回答
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

(区域设置是可选的,但我建议您在与国际团队合作时使用它。默认值是本地设置)

无论如何,以这种方式使用 NumberFormat 是一件很棒的事情,特别是如果您必须处理不同的国家或诸如百分比或货币之类的东西

于 2013-09-27T13:23:44.303 回答
0

您可以使用 NumberFormat 类并将最小零轻松设置为 0,它就像货币格式的魅力一样:

   formatter = NumberFormat.getCurrencyInstance();
   formatter.setMinimumFractionDigits(0);
   -----------
   print ( formatter.format(119.00) ) ---> $119
于 2020-05-25T18:10:50.960 回答