2012-04-03 9 views
5

Si hacemos System.out.printf("%10s", "1"); de forma predeterminada, los caracteres de espacio se agregarán para completar 10, ¿verdad? ¿Hay alguna manera de cambiar esto?¿Cambiar el carácter de relleno predeterminado en Java printf?

sé, puede agregar 0, especificando 0 antes de la s, pero hace printf apoyo cualquier otra cosa?

+0

relleno con 0 solo es compatible con tipos numéricos. No funcionará con 's', pero lo hará, por ejemplo, con' d': 'System.out.printf ("% 010d ", 1);' – Jesper

Respuesta

9

Nop . El espacio está codificado. He aquí el fragmento de la fuente java.util.Formatter incluso:

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

Si usted está mirando para conseguir un acolchado diferente que podría hacer un post-formato de reemplazar o algo similar:

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

Se puede utilizar cualquier número, como:

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


Usted puede hacer más formato utilizando el método de formato, como:

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


de salida: dcba

+0

Eso imprimirá 76 espacios y un dígito 1, que es no lo que el usuario1064918 estaba pidiendo. – Jesper

+0

Sí, @Jesper, no quise decir la cantidad de espacios. Quise decir el "personaje" para llenar el espacio vacío si la cadena es más corta que la longitud especificada en el formato. – user113454

+0

sí, lo entendí mal –

Cuestiones relacionadas