2012-04-03 41 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