273 votes

Remplissage à gauche d'une chaîne de caractères avec des zéros

J'ai vu des questions similaires ici et ici .

Mais je n'arrive pas à trouver le moyen de remplacer une chaîne par un zéro.

entrée : "129018" sortie : "0000129018"

La longueur totale de la sortie doit être TEN.

402voto

khachik Points 12589

Si votre chaîne de caractères ne contient que des chiffres, vous pouvez en faire un nombre entier, puis effectuer un remplissage :

String.format("%010d", Integer.parseInt(mystring));

Si ce n'est pas le cas Je voudrais savoir comment faire. .

2 votes

Je m'arrachais les cheveux parce que je n'avais pas vu que je devais exécuter la fonction Integer.parseInt().

9 votes

En outre, pour ceux qui souhaitent compléter leurs nombres/chaînes par quelque chose qui n'est pas "0", modifiez l'attribut %0 à %yourchoice .

4 votes

Juste un mot d'avertissement : Cette solution n'a pas fonctionné pour les grands nombres entiers (ex : "9999999999") ; j'ai donc opté pour la solution d'Oliver Michels utilisant Apache commons.

156voto

Oliver Michels Points 1129
String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")

le deuxième paramètre est la longueur de sortie souhaitée

"0" est le caractère de remplissage

26 votes

Juste pour rappel... String est immuable (voir Une chaîne est immuable. Quelle en est la signification exacte ? ), donc StringUtils.leftPad(variable, 10, "0"); ne changera pas le variable La valeur de l'entreprise. Vous devrez lui assigner le résultat, comme ceci : variable = StringUtils.leftPad(variable, 10, "0"); .

0 votes

Il serait agréable de voir la sortie de la commande suggérée sans avoir à l'exécuter. J'ai entendu quelque part qu'un bon est un paresseux :) Quoi qu'il en soit, le voici : StringUtils.leftPad("1", 3, '0') -> "001".

118voto

Rick Hanlon II Points 2034

Cette méthode permet de remplir n'importe quelle chaîne de caractères jusqu'à une largeur totale de 10 sans se soucier des erreurs d'analyse :

String unpadded = "12345"; 
String padded = "##########".substring(unpadded.length()) + unpadded;

//unpadded is "12345"
//padded   is "#####12345"

Si tu veux faire du remplissage à droite :

String unpadded = "12345"; 
String padded = unpadded + "##########".substring(unpadded.length());

//unpadded is "12345"
//padded   is "12345#####"  

Vous pouvez remplacer les caractères "#" par le caractère de votre choix, répété le nombre de fois que vous souhaitez que la largeur totale de la chaîne soit atteinte. Par exemple, si vous voulez ajouter des zéros à gauche pour que la chaîne entière fasse 15 caractères :

String unpadded = "12345"; 
String padded = "000000000000000".substring(unpadded.length()) + unpadded;

//unpadded is "12345"
//padded   is "000000000012345"  

L'avantage de cette méthode par rapport à la réponse de khachik est qu'elle n'utilise pas Integer.parseInt, qui peut déclencher une exception (par exemple, si le nombre que vous voulez compléter est trop grand, comme 12147483647). L'inconvénient est que si le nombre que vous voulez compléter est déjà un int, vous devrez le convertir en String et inversement, ce qui n'est pas souhaitable.

Donc, si vous êtes sûr qu'il s'agit d'un int, la réponse de khachik fonctionne très bien. Sinon, voici une stratégie possible.

7 votes

Il peut être nécessaire de faire attention à la longueur de la chaîne de caractères qui est complétée - l'appel à substring() peut provoquer une exception IndexOutOfBoundsException.

1 votes

Plus les performances ? Je pense que cela crée 3 cordes différentes, si je ne me trompe pas.

4 votes

Pourquoi ça a été voté ? C'est lié à JavaScript, pas à Java ?

55voto

thejh Points 20901
String str = "129018";
StringBuilder sb = new StringBuilder();

for (int toPrepend=10-str.length(); toPrepend>0; toPrepend--) {
    sb.append('0');
}

sb.append(str);
String result = sb.toString();

8 votes

+1 pour être la seule réponse correcte qui n'utilise pas de bibliothèque externe.

0 votes

Il suffit d'observer la taille du tampon de StringBuilder La valeur par défaut est de 16, et pour les grandes tailles, il faut régler correctement la taille du tampon, comme dans : StringBuilder sb = new StringBuilder();

55voto

Satish Points 129
String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);

1 votes

Il s'agit d'une approche plus détournée que la réponse acceptée.

3 votes

@PaulW : mais cela fonctionne pour les cordes

9 votes

Cela ne fonctionnerait pas si la chaîne comportait des espaces...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X