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