Encontramos la contestación a este dilema, al menos eso creemos. Si tienes interrogantes puedes escribirlo en el apartado de preguntas y con gusto te responderemos
Solución:
Esto es para lo que está destinado StringBuilder. Si va a manipular mucho, hágalo en un StringBuilder
luego conviértalo en un String
siempre que lo necesites.
StringBuilder
se describe así:
“Una secuencia mutable de caracteres. Esta clase proporciona una API compatible con StringBuffer, pero sin garantía de sincronización”.
Tiene replace
(y append
, insert
, delete
et al) y puedes usar toString
para transformarlo en un verdadero String
.
Las publicaciones anteriores son correctas, StringBuilder/StringBuffer son una solución.
Pero también debe preguntarse si es una buena idea reemplazar cadenas grandes en la memoria.
A menudo tengo manipulaciones de cadenas que se implementan como un flujo, por lo que en lugar de reemplazarlo en el string y luego enviándolo a un OutputStream, realizo el reemplazo en el momento en que envío el String al flujo de salida. Eso funciona mucho más rápido que cualquier reemplazo.
Esto funciona mucho más rápido si desea que este reemplazo implemente un mecanismo de plantilla. La transmisión siempre es más rápida ya que consume menos memoria y si los clientes son lentos, solo necesita generar a un ritmo lento, por lo que se escala mucho mejor.
El siguiente código es de aprox. 30 veces más rápido si no hay coincidencia y 5 veces más rápido si hay coincidencia.
static String fastReplace( String str, String target, String replacement )
int targetLength = target.length();
if( targetLength == 0 )
return str;
int idx2 = str.indexOf( target );
if( idx2 < 0 )
return str;
StringBuilder buffer = new StringBuilder( targetLength > replacement.length() ? str.length() : str.length() * 2 );
int idx1 = 0;
do
buffer.append( str, idx1, idx2 );
buffer.append( replacement );
idx1 = idx2 + targetLength;
idx2 = str.indexOf( target, idx1 );
while( idx2 > 0 );
buffer.append( str, idx1, str.length() );
return buffer.toString();
valoraciones y comentarios
Nos puedes añadir valor a nuestro contenido aportando tu veteranía en las explicaciones.