Pregunta

Si tiene que usar String.Replace () para reemplazar la prueba 50 veces, esencialmente tiene que crear una nueva cadena 50 veces. ¿StringBuilder.Replace () hace esto de manera más eficiente? Por ejemplo, ¿debería usar un StringBuilder si voy a reemplazar una gran cantidad de texto, incluso si no voy a agregarle ningún dato?

Estoy usando .NET, pero supongo que esto sería lo mismo que Java y posiblemente otros lenguajes.

¿Fue útil?

Solución

Este es exactamente el tipo de cosa para la que sirve StringBuilder, la modificación repetida del mismo objeto de texto, no es solo para la concatenación repetida, aunque parece ser para lo que se usa más comúnmente.

Otros consejos

Depende si el tamaño del reemplazo es mayor que la cadena reemplazada.

El StringBuilder sobre asigna su búfer , mientras que una cadena solo contiene la cantidad de caracteres que contiene.

La propiedad StringBuilder.Capacity es cuántos caracteres tendrá el búfer, mientras que StringBuilder.Length es cuántos caracteres están en uso.

Normalmente, debe establecer StringBuilder.Capacity en un valor mayor que la cadena resultante esperada. De lo contrario, el StringBuilder deberá reasignar su búfer. Cuando StringBuilder reasigna su búfer, lo duplica en tamaño , lo que significa que después de que un par reasigna es probablemente significativamente más grande de lo necesario, por defecto la capacidad comienza en 16.

Al establecer el valor de Capacidad cuando comienza (en el constructor, por ejemplo), guarda las reasignaciones del búfer de StringBuilder. Puede usar StringBuilder.MaxCapacity para limitar a la capacidad máxima a la que se puede expandir un StringBuilder.

Sí, lo es. String.Replace siempre crea una nueva cadena - StringBuilder.Replace no lo hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top