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.
Tu veux dire que c'est plus efficace ?
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.
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.
`
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é.
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
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.
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)
deStringBuilder
ou l'opération de concaténation+
deString
.1 votes
Oui pour une seule méthode ou une chaîne de méthodes, j'aimerais éviter la boucle ;)
1 votes
N'importe la méthode que vous utilisez utilisera une boucle pour vous. Vous pouvez écrire une telle méthode vous-même.
5 votes
Bien sûr, cela utilise une boucle, mais je ne crée pas mes propres méthodes s'il en existe déjà.
0 votes
Connexe : stackoverflow.com/questions/1235179/…