Eliminar o reemplazar parte de una cadena en Java

1. Información general

En este tutorial, veremos varios medios para eliminar o reemplazar parte de una cadena en Java.

Exploraremos eliminar y / o reemplazar una subcadena usando una API String , luego usando una API StringBuilder y finalmente usando la clase StringUtils de la biblioteca Apache Commons.

Como beneficio adicional, también buscaremos reemplazar una palabra exacta usando la API String y la clase RegExUtils de Apache Commons .

2. API de cadena

Uno de los métodos más simples y sencillos de reemplazar una subcadena es usar la clase replace, replaceAll o replaceFirst de una cadena.

El método replace () toma dos argumentos: texto de destino y texto de reemplazo:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = master.replace(target, replacement); assertTrue(processed.contains(replacement)); assertFalse(processed.contains(target));

El fragmento anterior producirá este resultado:

Hello World Java!

Si se requiere una expresión regular para elegir el destino, el método de elección debe ser replaceAll () o replaceFirst () . Como su nombre lo indica, replaceAll () reemplazará cada ocurrencia coincidente, mientras que replaceFirst () reemplazará la primera ocurrencia coincidente:

String master2 = "Welcome to Baeldung, Hello World Baeldung"; String regexTarget = "(Baeldung)$"; String processed2 = master2.replaceAll(regexTarget, replacement); assertTrue(processed2.endsWith("Java"));

El valor de procesado2 será:

Welcome to Baeldung, Hello World Java

Es porque la expresión regular proporcionada como regexTarget solo coincidirá con la última aparición de Baeldung. En todos los ejemplos dados anteriormente, podemos usar un reemplazo vacío y efectivamente eliminará un objetivo de un maestro .

3. API de StringBuilder

También podemos manipular texto en Java usando la clase StringBuilder . Los dos métodos aquí son delete () y replace () .

Podemos construir una instancia de un StringBuilder a partir de un String existente y luego usar los métodos mencionados para realizar la manipulación de String como se desee:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; int startIndex = master.indexOf(target); int stopIndex = startIndex + target.length(); StringBuilder builder = new StringBuilder(master);

Ahora podemos eliminar el objetivo con delete () :

builder.delete(startIndex, stopIndex); assertFalse(builder.toString().contains(target));

También podemos usar replace () para actualizar el maestro:

builder.replace(startIndex, stopIndex, replacement); assertTrue(builder.toString().contains(replacement));

Una diferencia aparente entre el uso de StringBuilder y la API de String es que tenemos que obtener el índice de inicio y finalización del String de destino nosotros mismos.

4. Clase StringUtils

Otro método que consideraremos es la biblioteca Apache Commons.

Primero, agreguemos la dependencia requerida a nuestro proyecto:

 org.apache.commons commons-lang3 3.8.1 

La última versión de la biblioteca se puede encontrar aquí.

La clase StringUtils tiene métodos para reemplazar una subcadena de una String :

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = StringUtils.replace(master, target, replacement); assertTrue(processed.contains(replacement));

Hay una variante sobrecargada de replace () que toma un parámetro integer max , que determina el número de ocurrencias a reemplazar. También podemos usar replaceIgnoreCase () si la distinción entre mayúsculas y minúsculas no es una preocupación :

String master2 = "Hello World Baeldung!"; String target2 = "baeldung"; String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement); assertFalse(processed2.contains(target));

5. Reemplazo de palabras exactas

En este último ejemplo, aprenderemos cómo reemplazar una palabra exacta dentro de una cadena .

La forma sencilla de realizar este reemplazo es utilizando una expresión regular con límites de palabras.

La expresión regular de límite de palabras es \ b . Incluir la palabra deseada dentro de esta expresión regular solo coincidirá con las ocurrencias exactas.

Primero, veamos cómo usar esta expresión regular con la API String:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!"; String regexTarget = "\\bcar\\b"; String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

La cadena exactWordReplaced contiene:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

Solo se reemplazará la palabra exacta. Tenga en cuenta que la barra inclinada hacia atrás siempre debe omitirse cuando se trabaja con expresiones regulares en Java.

Una forma alternativa de hacer este reemplazo es usar la clase RegExUtils de Apache Commons Library, que se puede agregar como una dependencia como vimos en la sección anterior:

String regexTarget = "\\bcar\\b"; String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck"); 

Si bien ambos métodos producirán el mismo resultado, decidir cuál debe utilizarse dependerá de nuestro escenario específico.

6. Conclusión

En conclusión, hemos explorado más de una forma de eliminar y reemplazar una subcadena en Java. El mejor método para aplicar aún depende en gran medida de la situación y el contexto actuales.

Como de costumbre, el código fuente completo está disponible en Github.