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:
- http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular
- http://www.desarrolloweb.com/manuales/expresiones-regulares.html
- http://www.google.es/search?q="expresiones+regulares"
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 */
Hola, entiendo estos ejemplos, pero quería saber cómo puedo quitar todos los caracteres especiales de una cadena menos algunos como: @ _ todo lo necesito para un servicio web en JAVA
Esperando alguna ayuda de su parte, me despido.