2012-04-03 48 views
5

如果我们默认做System.out.printf("%10s", "1");,那么空格字符会被加入来填写10,对吧?有没有办法改变这个?更改Java printf中的默认填充字符?

我知道,你可以添加0,由s前指定0,但确实printf支持别的什么吗?

+0

填充0仅支持数字类型。它不会与's'一起工作,但是它会使用'd':'System.out.printf(“%010d”,1);' – Jesper 2012-04-03 17:01:51

回答

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

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

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


可以使用格式方法,像做更多的格式:

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


输出:DCBA

+0

这将打印76个空格和一个数字1,它是不是user1064918所要求的。 – Jesper 2012-04-03 16:59:51

+0

是的,@Jesper,我不是指空格的数量。如果字符串比格式中指定的长度短,我的意思是填充空格的“字符”。 – user113454 2012-04-03 17:01:05

+0

是的,我弄错了! – 2012-04-03 17:50:53