Remplir une chaîne avec des zéros ou des espaces en Java

Remplir une chaîne avec des zéros ou des espaces en Java

1. Vue d'ensemble

Dans ce court didacticiel, nous allons voir comment remplir unString en Java. Nous nous concentrerons principalement sur un pavé gauche, ce qui signifie que nous y ajouterons des espaces ou des zéros de début jusqu'à ce qu'il atteigne la longueur souhaitée.

L'approche pour lesString remplis à droite est très similaire, nous ne soulignerons donc que les différences.

2. Pad aString à l'aide de méthodes personnalisées

La classeString en Java ne fournit pas une méthode pratique pour le remplissage, alors créons plusieurs méthodes par nous-mêmes. Tout d'abord, définissons quelques attentes:

assertEquals("    123456", padLeftZeros("123456", 10));
assertEquals("0000123456", padLeftZeros("123456", 10));

2.1. Utilisation deStringBuilder

Nous pouvons y parvenir avecStringBuilder et une logique procédurale:

public String padLeftZeros(String inputString, int length) {
    if (inputString.length() >= length) {
        return inputString;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() < length - inputString.length()) {
        sb.append('0');
    }
    sb.append(inputString);

    return sb.toString();
}

Nous pouvons voir ici que si la longueur du texte original est égale ou supérieure à la longueur souhaitée, nous en renvoyons la version inchangée. Sinon, nous créons un nouveauString,  en commençant par des espaces, et en ajoutant l'original.

Bien sûr, si nous voulions pad avec un caractère différent, nous pourrions simplement l'utiliser à la place d'un0.

De même, si nous voulons effectuer un pad droit, nous devons simplement fairenewStringBuilder(inputString) à la place, puis ajouter les espaces à la fin.

2.2. Utilisation desubstring

Une autre façon de faire le remplissage à gauche est decreate a String with the desired length that contains only pad characters and then use the substring() method:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
    sb.append(' ');
}

return sb.substring(inputString.length()) + inputString;

2.3. Utilisation deString.format

Et, enfin, depuis Java 5, on peut utiliserString.format():

return String.format("%1$" + length + "s", inputString).replace(' ', '0');

Il faut noter que par défaut, l'opération de remplissage sera effectuée à l'aide d'espaces. C’est la raison pour laquelle nous devons utiliser la méthodereplace() si nous voulons compléter avec des zéros ou tout autre caractère.

Pour le bon pad, il suffit d'utiliser un drapeau différent:%1$-

3. Pad aString à l'aide de bibliothèques

Et, il existe des bibliothèques externes qui offrent déjà des fonctionnalités de remplissage.

3.1. Apache Commons Lang

Apache Commons Lang fournit un ensemble de classes d’utilitaires Java. L'un des plus populaires est leStringUtils.

Pour l'utiliser, nous devons l'inclure dans notre projet en ajoutantits dependency à notre fichierpom.xml:


    org.apache.commons
    commons-lang3
    3.8.1

And then we pass the inputString and the length, just like the methods we created. Nous pouvons également passer le caractère de remplissage:

assertEquals("    123456", StringUtils.leftPad("123456", 10));
assertEquals("0000123456", StringUtils.leftPad("123456", 10, "0"));

Encore une fois, lesString seront remplis d'espaces par défaut ou nous devons définir explicitement un autre caractère de remplissage.

Il existe également des méthodesrightPad() correspondantes.

To explore more features of the Apache Commons Lang 3, you can check out our introductory tutorial. Si vous souhaitez voirother ways of the String manipulation using the StringUtils class, please refer to this article.

3.2. Google Guava

Une autre bibliothèque que nous pouvons utiliser est celle desGuava de Google. Bien sûr, nous devons d'abord l'ajouter au projet en ajoutantits dependency:


    com.google.guava
    guava
    27.0-jre

And then use the Strings class:

assertEquals("    123456", Strings.padStart("123456", 10, ' '));
assertEquals("0000123456", Strings.padStart("123456", 10, '0'));

Il n'y a pas de caractère de remplissage par défaut dans cette méthode, nous devons donc le passer à chaque fois.

Pour le pad droit, nous pouvons utiliser la méthodepadEnd().

The Guava library offers much more features and we have covered a lot of them. You can look here for the Guava related articles.

4. Conclusion

Dans cet article rapide, nous avons illustré comment nous pouvons remplir unString en Java. Nous avons présenté des exemples en utilisant nos propres implémentations ou des bibliothèques existantes.

Comme d'habitude, un code source complet peut être trouvéover on GitHub.