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?


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.


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.


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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.