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

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

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

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

在这种情况下,您使用数字中指定的宽度创build格式string,然后直接将其应用于数字。 这个例子的格式转换如下:

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

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

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

如何只是:

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

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