Formattare un numero intero utilizzando il formato stringa Java


129

Mi chiedo se sia possibile, usando il metodo String.format in Java, dare un numero intero che precede gli zeri?

Per esempio:

1 diventerebbe 001
2 diventerebbe 002
...
11 diventerebbe 011
12 diventerebbe 012
...
526 rimarrà come 526
... ecc

Al momento ho provato il seguente codice:

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

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

Sfortunatamente, questo precede il numero con 3 spazi vuoti. È possibile invece precedere il numero con zeri?


Risposte:


172

Utilizzare nell'identificatore %03ddi formato per l'intero. I 0mezzi che il numero sarà zero-filled se è inferiore a tre (in questo caso) cifre.

Consulta i Formatterdocumenti per altri modificatori.


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

Vedi java.util.Formatterper maggiori informazioni.


13

Se stai usando una libreria di terze parti chiamata apache commons-lang, la seguente soluzione può essere utile:

Usa la StringUtilsclasse di apache commons-lang :

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

Come StringUtils.leftPad()è più veloce diString.format()


StringUtils.leftPad è un'altra buona scelta e si potrebbe sostenere che è più leggibile e ti permette di riempire con altri personaggi. Ho avuto un Google in giro, ma non riesco a trovare nulla che confermi che è più veloce - potresti fornire qualche prova per questo?
Mi fa male la testa il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.