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

有没有更好的方法来得到这个结果?如果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();
}
628425 次浏览

字符串。格式(# EYZ0)

在你的情况下,它将是:

String formatted = String.format("%03d", num);
  • 0 -填充零
  • 3 -设置宽度为3

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

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

在本例中,您使用以数字指定的宽度创建格式字符串,然后将其直接应用于数字。本例的格式转换如下:

%% --> %
0  --> 0
%d --> <value of digits>
d  --> d

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

另一种选择是使用DecimalFormat来格式化数字字符串。这里有另一种不必使用String就能完成这项工作的方法。如果你困在1.5之前的世界:

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

如果jdk版本低于1.5,可以使用以下选项。

    int iTest = 2;
StringBuffer sTest = new StringBuffer("000000"); //if the string size is 6
sTest.append(String.valueOf(iTest));
System.out.println(sTest.substring(sTest.length()-6, sTest.length()));

这样如何:

public static String intToString(int num, int digits) {
String output = Integer.toString(num);
while (output.length() < digits) output = "0" + output;
return output;
}