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

And*_*s_D 14 java

已经回答了以十进制格式打印的整数的问题,但我正在寻找一种优雅的方法来对非十进制格式的整数(如二进制,八进制,十六进制)执行相同的操作.

创建这样的字符串很容易:

String intAsString = Integer.toString(12345, 8);
Run Code Online (Sandbox Code Playgroud)

将创建一个具有整数值12345的八进制表示的字符串.但是如何格式化它以使字符串具有10个数字,除了计算所需的零的数量和手动组装新的字符串.

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

gus*_*afc 23

对于oct和hex,它很简单String.format:

assert String.format("%03x", 16) == "010";
assert String.format("%03o", 8) == "010";
Run Code Online (Sandbox Code Playgroud)


Col*_*inD 15

使用番石榴你可以写:

String intAsString = Strings.padStart(Integer.toString(12345, 8), 10, '0');
Run Code Online (Sandbox Code Playgroud)


Jes*_*per 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;
Run Code Online (Sandbox Code Playgroud)

  • EW.这并没有明确说明它在做什么,而且根本不灵活.如果你想避免一个库,只需编写自己的字符串填充方法并完成它.我肯定不想记住像这样的"模式",我绝对不希望看到它在代码中使用多个位置. (6认同)