¿Cómo puedo borrar o vaciar un StringBuilder? [duplicar]
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 StringBuilder
en Java?
Dos formas de funcionar:
- Usar
stringBuilderObj.setLength(0)
. - 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 elsetLength
enfoque basado en (dado que es necesario asignar un nuevo objeto con un nuevo búfer, el objeto antiguo se vuelve elegible para GC, etc.).
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.