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?


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.


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.


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.