在Java中使用零填充左填充整数(非小数格式)

时间:2010-06-30 13:30:01

标签: java

问题has been answered for integers printed in decimal format,但我正在寻找一种优雅的方式来对非小数格式的整数做同样的事情(比如二进制,八进制) ,hex)。

创建此类字符串非常简单:

String intAsString = Integer.toString(12345, 8);

会创建一个字符串,其八进制表示为整数值12345.但是如何格式化它以使String具有10个数字,除了计算所需的零数并手动组装新的字符串。 / p>

一个典型的用例是创建具有固定位数(如16,32,...)的二进制数,其中一个人希望所有数字都包含前导零。

5 个答案:

答案 0 :(得分:23)

对于oct和hex,它就像String.format一样简单:

assert String.format("%03x", 16) == "010";
assert String.format("%03o", 8) == "010";

答案 1 :(得分:15)

使用Guava,你可以写:

String intAsString = Strings.padStart(Integer.toString(12345, 8), 10, '0');

答案 2 :(得分:6)

这个(标准Java):

private final static String ZEROES = "0000000000";

// ...

String s = Integer.toString(12345, 8);
String intAsString = s.length() <= 10 ? ZEROES.substring(s.length()) + s : s;

答案 3 :(得分:3)

打印出一个十六进制数,例如,使用ZERO填充:

System.out.println(String.format("%08x", 1234));

将提供以下输出,包括填充:

000004d2

用OCTAL的相关格式化字符替换x也可能会这样做。

答案 4 :(得分:2)

StringBuilder的帮助下,这是一个更可重复使用的替代方案。

public static String padZero(int number, int radix, int length) {
    String string = Integer.toString(number, radix);
    StringBuilder builder = new StringBuilder().append(String.format("%0" + length + "d", 0));
    return builder.replace(length - string.length(), length, string).toString();
}

ColinD发布的Guava示例非常漂亮。