494 votes

Comment puis-je supprimer ou vider un StringBuilder?

Je suis à l'aide d'un StringBuilder dans une boucle et chaque x itérations je veux le vider et de commencer avec un vide StringBuilder, mais je ne vois aucune méthode similaire à l' .Net StringBuilder.Clair dans les docs, juste le supprimer méthode qui semble trop compliqué.
Alors, quelle est la meilleure façon de nettoyer une StringBuilder en Java?

570voto

Marcus Points 2317

Edition mise à Jour pour apporter des commentaires.

Donc deux façons de travailler:

  1. setLength(0) sur le StringBuilder.
  2. Allouer un nouveau lieu d'effacement de la mémoire tampon

273voto

Jörn Horstmann Points 18118

Il existe essentiellement deux options, à l'aide de setLength(0) pour réinitialiser le StringBuilder ou en créer un nouveau à chaque itération. Tout deux ont des avantages et des inconvénients en fonction de l'utilisation.

Si vous connaissez la capacité de la classe StringBuilder au préalable, d'en créer un nouveau à chaque fois que devrait être tout aussi rapide que la fixation d'une nouvelle longueur. Il aidera également le garbage collector, puisque chaque classe StringBuilder être relativement de courte durée et que le gc est optimisé pour cela.

Quand vous ne connaissez pas la capacité, en réutilisant les mêmes StringBuilder pourrait être plus rapide. Chaque fois que vous dépassez la capacité lors de l'ajout, un nouveau support de tableau doit être alloué et le contenu précédent doit être copié. En réutilisant le même StringBuilder, il atteindra la capacité nécessaire après quelques itérations, et il n'est pas être la copie par la suite.

68voto

krtek Points 15497

delete n'est pas trop compliqué :

myStringBuilder.delete(0, myStringBuilder.length());

Vous pouvez également le faire :

myStringBuilder.setLength(0);

24voto

Javamann Points 1937

Si vous regardez le code source pour un StringBuilder ou StringBuffer la setLength() appel juste réinitialise la valeur de l'indice pour le tableau de caractères. À mon humble avis à l'aide de la méthode setLength sera toujours plus rapide qu'une nouvelle allocation. Ils devraient avoir nommé la méthode "clair" ou "reset" de sorte qu'il serait plus clair.

4voto

javaddroid Points 71
 StringBuilder s = new StringBuilder();
    s.append("a");
    s.append("a");
    //  System.out.print(s); is return "aa"
    s.delete(0, s.length());
    System.out.print(s.length()); //is return 0

est le meilleur moyen .

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: