Saltar al contenido

¿Alternativas más rápidas para reemplazar el método en una cadena de Java?

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 StringBuilderluego 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, deleteet 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *