Métodos replace, replaceFirst y replaceAll y expresiones regulares

Continuando con la entrada anterior de manejo de cadenas, voy a analizar los métodos siguientes:

Antes de nada, cabe explicar que un CharSequence es una interfaz que encapsula una secuencia de caracteres de sólo lectura y acceso uniforme. La clase String implementa dicha interfaz, al igual que las clases CharBuffer, Segment, StringBuffer y StringBuilder. Para usar el método replace lo más sencillo será utilizar un String normal.

Los métodos replaceFirst y replaceAll trabajarán mediante expresiones regulares (en adelante ER), un elemento muy potente de la programación, pero que os podrá dar muchos dolores de cabeza en un futuro. En resumidas cuentas, una expresión regular es una cadena de texto que indica una serie de patrones. Estos patrones se compararán con todas las cadenas sobre las que apliquemos la ER y obtendremos una lista de las cadenas que cumplen con dicho patrón.

Por ejemplo, tenemos la siguiente lista de palabras:

gato
gata
gatu
gatos
gatas

  • Si escribimos la siguiente ER "gato", obtendremos como resultado las palabras gato y gatos.
  • Si escribimos la ER "gat[o|a]" obtendremos gato, gata, gatos, gatas.
  • Si escribimos la ER "gato$" obtendremos solamente gato, pues el símbolo '$' representa el final de la cadena, por lo que también podría obtener cualquier palabra que terminara por -gato.
  • El símbolo '^' representa el inicio de la cadena.

Como he explicado antes, las expresiones regulares pueden llegar a ser muy complejas, por lo que os recomiendo leer algunos artículos sobre el tema:

replace(CharSequence target, CharSequence replacement)

Este método reemplaza la cadena target por la cadena replacement. Añadir que reemplazar "aa"  por "oo" en la cadena "holaaa", devolverá "holooa" y no "holaoo". Veamos un fragmento de código:

// Cadena sobre la que realizaremos la sustitución
String cadena1 = "En un lugar de La Mancha";
 
// Cadena en la que almacenaremos el resultado
String cadena2 = null;
 
cadena2 = cadena1.replace("lugar", "bar");
 
System.out.println(cadena2);
// En un bar de La Mancha
 
System.out.println(cadena1);
// En un lugar de La Mancha
/* Como vemos, el ejecutar el método 
replace no afecta a la cadena original */

replaceFirst(String regex, String replacement)

Este método reemplaza sólo la primera cadena que coincida con la expresión regular regex por la cadena replacement. Ejemplo:

// Cadena sobre la que realizaremos la sustitución
String cadena1 = "En un lugar de La Mancha";
 
// Cadena en la que almacenaremos el resultado
String cadena2 = null;
 
cadena2 = cadena1.replaceFirst("a", "e");
 
System.out.println(cadena2);
// En un luger de La Mancha
 
cadena2 = cadena1.replaceFirst("[a|u]", "e");
 
System.out.println(cadena2);
// En en lugar de La Mancha
 
System.out.println(cadena1);
// En un lugar de La Mancha
/* Como vemos, el ejecutar el método
replaceFirst no afecta a la cadena original */

replaceAll(String regex, String replacement)

Este método es similar a replaceFirst, pero reemplaza todas las cadenas que coinciden con la expresión regular dada regex por la cadena replacement. Ejemplo:

// Cadena sobre la que realizaremos la sustitución
String cadena1 = "En un lugar de La Mancha";
 
// Cadena en la que almacenaremos el resultado
String cadena2 = null;
 
cadena2 = cadena1.replaceAll("a", "e");
 
System.out.println(cadena2);
// En un luger de Le Menche
 
cadena2 = cadena1.replaceAll("[a|u]", "e");
System.out.println(cadena2);
// En en leger de Le Menche
 
System.out.println(cadena1);
// En un lugar de La Mancha
/* Como vemos, el ejecutar el método
replaceAll no afecta a la cadena original */

Su voto: Nada Promedio: 2.6 (78 votos)

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>. The supported tag styles are: <foo>, [foo].

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.