2012-04-03 16 views
5

Se facciamo System.out.printf("%10s", "1"); per impostazione predefinita, i caratteri spazio verranno aggiunti per riempire 10, giusto? C'è un modo per cambiare questo?Modificare il carattere di riempimento predefinito in Java printf?

Lo so, è possibile aggiungere 0, specificando 0 prima del s, ma supporta printf qualcos'altro?

+0

Imbottitura con 0 è supportato solo per i tipi numerici. Non funzionerà con 's', ma, ad esempio, con' d': 'System.out.printf ("% 010d ", 1);' – Jesper

risposta

9

Nope . Lo spazio è hardcoded. Ecco il frammento di java.util.Formatter fonte ancora:

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(); 
} 

Se stai cercando di ottenere un'imbottitura diversa si potrebbe fare un post-formato di sostituire o qualcosa di simile:

System.out.print(String.format("%10s", "1").replace(' ', '#')); 
0

È possibile utilizzare qualsiasi numero, come:

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


Si può fare di più formattazione utilizzando il metodo format, come:

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


uscita: DCBA

+0

Che stamperà 76 spazi e una cifra 1, che è non quello che chiedeva l'utente1064918. – Jesper

+0

Sì, @Jesper, non intendevo il numero di spazi. Intendevo il "carattere" per riempire lo spazio vuoto se la stringa è più corta della lunghezza specificata nel formato. – user113454

+0

sì, ho sbagliato! –

Problemi correlati