更改Java printf中的默认填充字符?

时间:2012-04-03 16:45:28

标签: java printf

如果我们默认System.out.printf("%10s", "1");,则会添加空格字符以填充10,对吧?有没有办法改变这个?

我知道,您可以通过在0之前指定0来添加s,但printf是否支持其他内容?

2 个答案:

答案 0 :(得分:9)

不。空间是硬编码的。这是java.util.Formatter源码的片段,甚至:

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(' ', '#'));

答案 1 :(得分:0)

您可以使用任何数字,例如:

System.out.printf("%77s", "1");


您可以使用格式化方法进行更多格式化,例如:

System.out.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");


输出:d c b a