Mettre en forme un entier à l'aide du format de chaîne Java

129

Je me demande s'il est possible, en utilisant la méthode String.format en Java, de donner un entier précédant les zéros?

Par exemple:

1 deviendrait 001
2 deviendrait 002
...
11 deviendrait 011
12 deviendrait 012
...
526 resterait comme 526
... etc.

Pour le moment, j'ai essayé le code suivant:

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

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

Malheureusement, cela précède le nombre avec 3 espaces vides. Est-il possible de faire précéder le nombre de zéros à la place?

J'ai mal à la tête
la source
duplication possible de Ajouter des zéros non significatifs à Java
Jonathon Faust

Réponses:

172

À utiliser %03ddans le spécificateur de format pour l'entier. Le 0signifie que le nombre sera rempli de zéros s'il comporte moins de trois (dans ce cas) chiffres.

Consultez la Formatterdocumentation pour les autres modificateurs.

Tapis
la source
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

Voir java.util.Formatterpour plus d'informations.

maerics
la source
13

Si vous utilisez une bibliothèque tierce appelée apache commons-lang, la solution suivante peut être utile:

Utilisez la StringUtilsclasse de apache commons-lang :

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

Comme StringUtils.leftPad()c'est plus rapide queString.format()

Anil Bharadia
la source
StringUtils.leftPad est un autre bon choix et on pourrait dire qu'il est plus lisible et qu'il vous permet de compléter avec d'autres caractères. J'ai eu un Google mais je ne trouve rien qui confirme qu'il est plus rapide - pouvez-vous fournir des preuves à ce sujet?
Ma tête me fait mal le
github.com/anilbharadia/JavaPerformanceTests/blob/master/... Exécutez-le avec junit et vérifiez l'heure
Anil Bharadia