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

时间:2008-11-09 07:35:20

标签: 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();
}

5 个答案:

答案 0 :(得分:1208)

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

答案 1 :(得分:88)

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

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

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

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

因此,如果数字等于5,则格式字符串变为%05d,其指定宽度为5的整数打印前导零。有关转换说明符的详细信息,请参阅String.format {{1}}。

答案 2 :(得分:34)

另一种选择是使用DecimalFormat格式化数字字符串。如果你被困在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);
}

答案 3 :(得分:4)

如何:

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

答案 4 :(得分:-7)

如果您的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()));