¿Cómo puedo borrar o vaciar un StringBuilder? [duplicar]

Resuelto Hans Olsson asked hace 13 años • 9 respuestas

Estoy usando un StringBuilder en un bucle y cada x iteraciones quiero vaciarlo y comenzar con un vacío StringBuilder, pero no puedo ver ningún método similar a .NET StringBuilder.Clear en la documentación, solo eliminar método que parece demasiado complicado.

Entonces, ¿cuál es la mejor manera de limpiar un StringBuilderen Java?

Hans Olsson avatar Mar 04 '11 17:03 Hans Olsson
Aceptado

Dos formas de funcionar:

  1. UsarstringBuilderObj.setLength(0) .
  2. Asigne uno nuevo en new StringBuilder()lugar de borrar el búfer. Tenga en cuenta que para rutas de código críticas para el rendimiento, este enfoque puede ser significativamente más lento que el setLengthenfoque basado en (dado que es necesario asignar un nuevo objeto con un nuevo búfer, el objeto antiguo se vuelve elegible para GC, etc.).
Marcus Frödin avatar Mar 04 '2011 10:03 Marcus Frödin

Básicamente, existen dos alternativas: setLength(0)restablecer StringBuilder o crear uno nuevo en cada iteración. Ambos pueden tener ventajas y desventajas según el uso.

Si conoce de antemano la capacidad esperada de StringBuilder, crear uno nuevo cada vez debería ser tan rápido como establecer una nueva longitud. También ayudará al recolector de basura, ya que cada StringBuilder tendrá una duración relativamente corta y el gc está optimizado para eso.

Cuando no conoce la capacidad, reutilizar el mismo StringBuilder puede ser más rápido. Cada vez que se excede la capacidad al agregar, se debe asignar una nueva matriz de respaldo y se debe copiar el contenido anterior. Al reutilizar el mismo StringBuilder, alcanzará la capacidad necesaria después de algunas iteraciones y no habrá ninguna copia posterior.

Jörn Horstmann avatar Mar 04 '2011 11:03 Jörn Horstmann