【发布时间】:2012-04-17 08:57:00
【问题描述】:
如果我们默认System.out.printf("%10s", "1");,会加空格字符补10,对吧?有办法改变吗?
我知道,您可以通过在s 之前指定0 来添加0,但printf 是否支持其他任何内容?
【问题讨论】:
-
仅数字类型支持使用 0 填充。它不适用于
s,但它可以用于例如d:System.out.printf("%010d", 1);
如果我们默认System.out.printf("%10s", "1");,会加空格字符补10,对吧?有办法改变吗?
我知道,您可以通过在s 之前指定0 来添加0,但printf 是否支持其他任何内容?
【问题讨论】:
s,但它可以用于例如d:System.out.printf("%010d", 1);
不。空间是硬编码的。这里甚至是 java.util.Formatter 源码的 sn-p:
private String justify(String s) {
if (width == -1)
return s;
StringBuilder sb = new StringBuilder();
boolean pad = f.contains(Flags.LEFT_JUSTIFY);
int sp = width - s.length();
if (!pad)
for (int i = 0; i < sp; i++) sb.append(' ');
sb.append(s);
if (pad)
for (int i = 0; i < sp; i++) sb.append(' ');
return sb.toString();
}
如果您希望获得不同的填充,您可以进行格式后替换或类似的操作:
System.out.print(String.format("%10s", "1").replace(' ', '#'));
【讨论】:
您可以使用任何数字,例如:
System.out.printf("%77s", "1");
您可以使用 format 方法进行更多格式化,例如:
System.out.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
输出:d c b a
【讨论】: