【问题标题】:Change the default padding character in Java printf?更改 Java printf 中的默认填充字符?
【发布时间】:2012-04-17 08:57:00
【问题描述】:

如果我们默认System.out.printf("%10s", "1");,会加空格字符补10,对吧?有办法改变吗?

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

【问题讨论】:

  • 仅数字类型支持使用 0 填充。它不适用于s,但它可以用于例如dSystem.out.printf("%010d", 1);

标签: java printf


【解决方案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(' ', '#'));

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

    • 这将打印 76 个空格和一个数字 1,这不是 user1064918 所要求的。
    • 是的,@Jesper,我不是指空格数。如果字符串比格式中指定的长度短,我的意思是“字符”来填充空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2011-04-26
    相关资源
    最近更新 更多