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