94 votes

Java - Créer une nouvelle instance de Chaîne avec une longueur spécifiée et rempli avec des caractères spécifiques. La meilleure solution?

Je n'ai vérifier les autres questions; cette question a son accent sur la résolution de cette question en particulier, la manière la plus efficace.

Parfois, vous voulez créer une nouvelle chaîne avec une longueur spécifiée, et avec un caractère par défaut de remplissage de l'ensemble de la chaîne.

c'est à dire, ce serait cool si vous pouviez faire new String(10, '*') et de créer une nouvelle Chaîne à partir de là, avec une longueur de 10 caractères, tout en ayant une *.

Parce que ce constructeur n'existe pas, et vous ne pouvez pas étendre de Chaîne, vous devez soit créer une classe wrapper ou une méthode pour le faire pour vous.

En ce moment, je suis en utilisant ceci:

protected String getStringWithLengthAndFilledWithCharacter(int length, char charToFill) {
    char[] array = new char[length];
    int pos = 0;
    while (pos < length) {
        array[pos] = charToFill;
        pos++;
    }
    return new String(array);
}

Il manque encore de tout vérifier (c'est à dire lorsque la longueur est de 0, cela ne fonctionnera pas). Je suis de la construction de la matrice d'abord parce que je crois qu'il est plus rapide que l'utilisation de la chaîne de concatination ou à l'aide d'un StringBuffer de le faire.

Quelqu'un d'autre a une meilleure solution?

130voto

Cowan Points 17235

Apache Commons Lang (probablement utile assez pour être dans le classpath de tout projet non trivial) a StringUtils.répéter():

String filled = StringUtils.repeat("*", 10);

Facile!

106voto

romaintaz Points 32120

Utilisez simplement le StringUtils classe de apache commons lang projet. Vous avez un leftPad méthode:

StringUtils.leftPad("foobar", 10, '*'); // Returns "****foobar"

60voto

unwind Points 181987

Pas besoin de faire la boucle, et en utilisant simplement Java standard de la bibliothèque de classes:

protected String getStringWithLengthAndFilledWithCharacter(int length, char charToFill) {
  if (length > 0) {
    char[] array = new char[length];
    Arrays.fill(array, charToFill);
    return new String(array);
  }
  return "";
}

Comme vous pouvez le voir, j'ai également ajouté adapté le code pour l' length == 0 des cas.

40voto

kwarnke Points 31

Quelques solutions possibles.

Cela crée une Chaîne à longueur de temps '0' rempli et remplace alors le " 0 " avec la charToFill (vieille école).

String s = String.format("%0" + length + "d", 0).replace('0', charToFill);

Ceci crée une Liste contenant la longueur des temps de Chaînes avec charToFill et ensuite se joindre à la Liste dans une Chaîne.

String s = String.join("", Collections.nCopies(length, String.valueOf(charToFill)));

Cela crée un illimité java8 Flux avec des Chaînes de caractères avec charToFill, limite la sortie à la longueur et recueille les résultats avec une Chaîne de menuisier (nouvelle école).

String s = Stream.generate(() -> String.valueOf(charToFill)).limit(length).collect(Collectors.joining());

22voto

Pavel Netesa Points 131
char[] chars = new char[10];
Arrays.fill(chars, '*');
String text = new String(chars);

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