Formatee un entero utilizando el formato de cadena Java

129

Me pregunto si es posible, utilizando el método String.format en Java, dar un entero que precede a ceros.

Por ejemplo:

1 se convertiría en 001
2 se convertiría en 002
...
11 se convertiría en 011
12 se convertiría en 012
...
526 se mantendría como 526
... etc.

Por el momento he probado el siguiente código:

String imageName = "_%3d" + "_%s";

for( int i = 0; i < 1000; i++ ){
    System.out.println( String.format( imageName, i, "foo" ) );
}

Desafortunadamente, esto precede al número con 3 espacios vacíos. ¿Es posible preceder el número con ceros en su lugar?

Me duele la cabeza
fuente
posible duplicado de Agregar ceros a la izquierda en Java
Jonathon Faust

Respuestas:

172

Usar %03den el especificador de formato para el entero. Esto 0significa que el número se rellenará con ceros si tiene menos de tres dígitos (en este caso).

Ver los Formatterdocumentos para otros modificadores.

Estera
fuente
211
String.format("%03d", 1)  // => "001"
//              │││   └── print the number one
//              ││└────── ... as a decimal integer
//              │└─────── ... minimum of 3 characters wide
//              └──────── ... pad with zeroes instead of spaces

Ver java.util.Formatterpara más información.

maerics
fuente
13

Si está utilizando una biblioteca de terceros llamada apache commons-lang, la siguiente solución puede ser útil:

Utilice la StringUtilsclase de apache commons-lang :

int i = 5;
StringUtils.leftPad(String.valueOf(i), 3, "0"); // --> "005"

Como StringUtils.leftPad()es más rápido queString.format()

Anil Bharadia
fuente
StringUtils.leftPad es otra buena opción y se podría argumentar que es más legible y le permite rellenar con otros caracteres. He tenido un Google alrededor, pero no puedo encontrar nada que confirme que sea más rápido, ¿podría proporcionar alguna evidencia de eso?
Me duele la cabeza el
github.com/anilbharadia/JavaPerformanceTests/blob/master/… Ejecútelo con junit y verifique la hora
Anil Bharadia