当前位置:  开发笔记 > 编程语言 > 正文

在Java中将前导零添加到数字?

如何解决《在Java中将前导零添加到数字?》经验,为你挑选了3个好方法。

有没有更好的方法来获得这个结果?如果num的位数多于数字,则此函数失败,我觉得它应该在某个库中(如Integer.toString(x,"%3d")或其他东西)

static String intToString(int num, int digits) {
    StringBuffer s = new StringBuffer(digits);
    int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1; 
    for (int i = 0; i < zeroes; i++) {
        s.append(0);
    }
    return s.append(num).toString();
}

begray.. 1273

String.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax)

在你的情况下,它将是:

String formatted = String.format("%03d", num);

0 - 用零填充

3 - 将宽度设置为3

Santhosh ......只需动态制作格式字符串`String.format("%0"+ paddingSize +"d",num)` (48认同)

想要指出这个解决方案可能有问题:它根据默认语言环境产生不同的结果,因为String.format是LOCALE-SPECIFIC.有许多语言环境不使用阿拉伯数字0-9(奇怪的是,阿拉伯语是其中一个语言环境).当我用阿拉伯语设置手机时我的代码在Android上崩溃了,因为我使用String.format("%04d-%02d-%02d",年,月,日)格式化日期字符串,我认为会产生一个ISO 8601日期,但当电话是阿拉伯语时它会产生类似"2014-08-06"的东西. (11认同)

@adevine你可以通过指定你想要的本地ex:Local.US来避免这个错误,对于阿拉伯用户来说,使用阿拉伯数字非常方便,只需调用`String.format(Local.US,string,params)` (8认同)

`String formatted = String.format((Locale)null,“%05d”,yourLongNumber);`也应该起作用,并且对于某些语言来说更安全... (2认同)


Jason Coco.. 91

从Java 1.5开始,您可以使用该String.format方法.例如,要做与您的示例相同的事情:

String format = String.format("%%0%dd", digits);
String result = String.format(format, num);
return result;

在这种情况下,您将使用数字指定的宽度创建格式字符串,然后将其直接应用于数字.此示例的格式转换如下:

%% --> %
0  --> 0
%d --> 
d  --> d

因此,如果数字等于5,则格式字符串变为%05d,指定宽度为5的整数打印前导零.请参阅Java文档的String.format有关转换说明的更多信息.



1> begray..:

String.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax)

在你的情况下,它将是:

String formatted = String.format("%03d", num);

0 - 用零填充

3 - 将宽度设置为3


Santhosh ......只需动态制作格式字符串`String.format("%0"+ paddingSize +"d",num)`
想要指出这个解决方案可能有问题:它根据默认语言环境产生不同的结果,因为String.format是LOCALE-SPECIFIC.有许多语言环境不使用阿拉伯数字0-9(奇怪的是,阿拉伯语是其中一个语言环境).当我用阿拉伯语设置手机时我的代码在Android上崩溃了,因为我使用String.format("%04d-%02d-%02d",年,月,日)格式化日期字符串,我认为会产生一个ISO 8601日期,但当电话是阿拉伯语时它会产生类似"2014-08-06"的东西.
@adevine你可以通过指定你想要的本地ex:Local.US来避免这个错误,对于阿拉伯用户来说,使用阿拉伯数字非常方便,只需调用`String.format(Local.US,string,params)`
`String formatted = String.format((Locale)null,“%05d”,yourLongNumber);`也应该起作用,并且对于某些语言来说更安全...

2> Jason Coco..:

从Java 1.5开始,您可以使用该String.format方法.例如,要做与您的示例相同的事情:

String format = String.format("%%0%dd", digits);
String result = String.format(format, num);
return result;

在这种情况下,您将使用数字指定的宽度创建格式字符串,然后将其直接应用于数字.此示例的格式转换如下:

%% --> %
0  --> 0
%d --> 
d  --> d

因此,如果数字等于5,则格式字符串变为%05d,指定宽度为5的整数打印前导零.请参阅Java文档的String.format有关转换说明的更多信息.


@Robert确实设置了正确的宽度.它与bergay的答案完全相同,只是填充是使用相同的界面以编程方式添加的.您是否只是简单地看一下格式字符串并确定它是不正确的,而不是看看代码实际上在做什么?

3> Elijah..:

另一种选择是使用DecimalFormat格式化数字String.如果你被困在pre 1.5世界中,这里有另一种方法来完成这项工作,而不必使用String.format:

static String intToString(int num, int digits) {
    assert digits > 0 : "Invalid number of digits";

    // create variable length array of zeros
    char[] zeros = new char[digits];
    Arrays.fill(zeros, '0');
    // format number as String
    DecimalFormat df = new DecimalFormat(String.valueOf(zeros));

    return df.format(num);
}

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有