43 votes

Java: String - ajouter un caractère n fois

Y a-t-il un moyen simple d'ajouter un caractère ou une autre chaîne n fois à une chaîne existante? Je n'ai rien trouvé dans String, Stringbuilder, etc.

3 votes

Quel est le problème avec une boucle for ?

1 votes

Cherchez-vous une méthode? il n'y en a pas.

2 votes

Je n'ai rien trouvé dans String, Stringbuilder ... Je suis sûr que vous n'avez pas vu la méthode append(str) de StringBuilder ou l'opération de concaténation + de String.

1voto

Vicky Points 2035
 String toAdd = "toAdd";
 StringBuilder s = new StringBuilder();
 for(int count = 0; count < MAX; count++) {
     s.append(toAdd);
  }
  String output = s.toString();

0voto

pcalcao Points 10302

Gardez à l'esprit que si le "n" est grand, ce n'est peut-être pas une bonne idée d'utiliser +=, car à chaque fois que vous ajoutez une autre chaîne à travers +=, la JVM créera un tout nouvel objet (beaucoup d'informations à ce sujet sont disponibles).

Quelque chose comme :

StringBuilder b = new StringBuilder(existing_string);
for(int i = 0; i

`

Je ne code pas réellement ceci dans un IDE, donc des défauts mineurs peuvent se produire, mais voici l'idée de base.

`

0 votes

Tu veux dire que c'est plus efficace ?

0 votes

Oui, c'est beaucoup plus efficace pour les opérations où vous effectuez de nombreux ajouts à la chaîne d'origine, ou simplement lorsque vous construisez une chaîne en concaténant plusieurs sous-chaînes. ensta-paristech.fr/~diam/java/online/notes-java/data/strings‌​/… lire le passage sur l'efficacité.

0voto

avuton Points 13

Comment j'ai fait :

int final nombreEspaces = 22;
final char[] tableauEspaces = new char[nombreEspaces];
Arrays.fill(tableauEspaces, ' ');

Maintenant, ajoutez-le à votre StringBuilder

stringBuilder.append(tableauEspaces);

ou String

int final espaces = String.valueOf(tableauEspaces);

0 votes

C'est assez similaire à la réponse de sucode.

0voto

Panayotis Points 409

Pour avoir une idée de la pénalité de vitesse, j'ai testé deux versions, une avec Array.fill et une avec StringBuilder.

public static String repeat(char what, int howmany) {
    char[] chars = new char[howmany];
    Arrays.fill(chars, what);
    return new String(chars);
}

et

public static String repeatSB(char what, int howmany) {
    StringBuilder out = new StringBuilder(howmany);
    for (int i = 0; i < howmany; i++)
        out.append(what);
    return out.toString();
}

en utilisant

public static void main(String... args) {
    String res;
    long time;

    for (int j = 0; j < 1000; j++) {
        res = repeat(' ', 100000);
        res = repeatSB(' ', 100000);
    }
    time = System.nanoTime();
    res = repeat(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeat: " + time);

    time = System.nanoTime();
    res = repeatSB(' ', 100000);
    time = System.nanoTime() - time;
    System.out.println("elapsed repeatSB: " + time);
}

(notez que la boucle dans la fonction main est pour activer le JIT)

Les résultats sont les suivants:

elapsed repeat: 65899
elapsed repeatSB: 305171

C'est une énorme différence

-2voto

COD3BOY Points 7466

Voici un moyen simple...

for(int i=0;i

1 votes

Vous devriez utiliser StringBuilder dans une boucle, car la concaténation de chaînes dans une boucle est en O(xn^2)

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