问题has been answered for integers printed in decimal format,但我正在寻找一种优雅的方式来对非小数格式的整数做同样的事情(比如二进制,八进制) ,hex)。
创建此类字符串非常简单:
String intAsString = Integer.toString(12345, 8);
会创建一个字符串,其八进制表示为整数值12345.但是如何格式化它以使String具有10个数字,除了计算所需的零数并手动组装新的字符串。 / p>
一个典型的用例是创建具有固定位数(如16,32,...)的二进制数,其中一个人希望所有数字都包含前导零。
答案 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示例非常漂亮。