En PC Resumen vamos a hablar del Reemplazo de subcadenas y división de cadenas en Java. A veces es conveniente reemplazar partes de una cadena, o dividir una cadena en diferentes trozos. Para hacer esto, la clase String proporciona los métodos replaceAll, replaceFirst y split. Estos métodos se muestran en el siguiente código:
public class SubstitucionRegex {
public static void main(String args[]) {
String primeraCadena = "Este enunciado termina con 5 estrellas *****";
String segundaCadena = "1, 2, 3, 4, 5, 6, 7, 8";
System.out.printf("Cadena 1 original: %s\n", primeraCadena);
// substituye '*' por '^'
primeraCadena = primeraCadena.replaceAll("\\*", "^");
System.out.printf("^ substituye a *: %s\n", primeraCadena);
// substituye 'estrellas' por 'intercaladores'
primeraCadena = primeraCadena.replaceAll( "estrellas", "intercaladores" );
System.out.printf("\"intercaladores\" substituye a \"estrellas\": %s\n", primeraCadena);
// substituye las palabras con 'palabra'
System.out.printf("Cada palabra se substituye por \"palabra\": %s\n\n", primeraCadena.replaceAll("\\w+", "palabra"));
System.out.printf("Cadena 2 original: %s\n", segundaCadena );
// substituye los tres primeros dígitos por 'digito'
for (int i = 0; i < 3; i++) {
segundaCadena = segundaCadena.replaceFirst( "\\d", "digit" );
}
System.out.printf("Los tres primeros dígitos se han substituido por \"digito\" : %s\n", segonaCadena);
String salida = "Cadena dividida en comas: [";
String[] resultados = segundaCadena.split( ",\\s*" ); // se divide a las comas
for (String cadena : resultados) {
salida += "\"" + cadena + "\", ";
}
// elimina la coma adicional i añade un claudátor
salida = salida.substring(0, salida.length() - 2 ) + "]";
System.out.println(salida);
}
}
El método replaceAll reemplaza el texto en una cadena con nuevo texto (el segundo argumento) en cualquier parte donde la cadena original concuerde con una expresión regular (el primer argumento). Fíjense que la expresión regular ( "\\ *") coloca dos barras inversas antes del carácter. Por regla general, * es un cuantificador. Pero en este caso nosotros queremos encontrar el carácter literal *; por eso hemos de evadir el carácter con '\'. Al hacerlo indicamos al motor de concordancia que busque el carácter en sí. Como la expresión está dentro de una cadena de Java y '\' es un carácter especial en las cadenas Java, debemos incluir un '\' adicional.
El método replaceFirst reemplaza la primera ocurrencia de la concordancia de un patrón. Las cadenas de Java son inmutables y por lo tanto devuelve una nueva cadena. Al iterar tres golpes reemplazamos los tres primeros dígitos.
El método split divide una cadena en diferentes subcadenas. La cadena original se subdivide en cualquier posición que concuerde con una expresión regular especificada. El método devuelve una tabla de cadenas que contiene las subcadenas. En este programa utilizamos el método para descomponer en tokens una cadena de enteros separados por comas. En concordar con cualquier número de espacios en blanco, eliminamos los posibles espacios en blanco adicionales de las subcadenas resultantes. Tenga en cuenta que las comas y los espacios en blanco no se devuelven como parte de las subcadenas.