HOWTO · Java

Cómo reemplazar varios caracteres en una cadena en Java

Aprende a reemplazar varios caracteres de una cadena en Java con replaceAll(), replace() y replaceFirst().

En esta página

En Java, usa String.replaceAll() con una clase de caracteres de expresión regular para reemplazar todos los caracteres seleccionados de una cadena. Para sustituciones literales que no requieren un patrón, encadena llamadas a String.replace(). Si solo quieres cambiar la primera coincidencia de una expresión regular, usa String.replaceFirst().

Reemplazar múltiples caracteres en una cadena usando replaceAll() en Java

String.replaceAll(regex, replacement) interpreta el primer argumento como una expresión regular y reemplaza todas sus coincidencias. Una clase de caracteres como [_/] coincide con un guion bajo o una barra diagonal, de uno en uno. No coincide con la secuencia de dos caracteres _/ como una unidad.

Este programa completo cambia los guiones bajos y las barras diagonales por guiones y, a continuación, imprime ambas cadenas:

public class ReplaceAllChars {
  public static void main(String[] args) {
    String input = "j_u_s_t/a/s/t/r/i/n/g";
    String result = input.replaceAll("[_/]", "-");
    System.out.println("Input: " + input);
    System.out.println("Result: " + result);
  }
}
Input: j_u_s_t/a/s/t/r/i/n/g
Result: j-u-s-t-a-s-t-r-i-n-g

En el código fuente de Java, también debes escapar la barra inversa de una expresión regular dentro del literal de cadena. Por ejemplo, "\\d" proporciona la expresión regular \d, que coincide con un dígito. Si reemplazas una coincidencia por "", la eliminas. Así, "abcd12345efgh".replaceAll("\\d", "") quita los dígitos; "s t r i n g".replaceAll(" ", "") quita los espacios normales; y "s t\\tr".replaceAll("\\s", "-") reemplaza los caracteres de espacio en blanco que reconoce la expresión regular, incluidos espacios y tabulaciones, por guiones.

Estas expresiones quitan los dígitos, quitan los espacios normales y reemplazan los espacios en blanco reconocidos por la expresión regular (incluidos espacios y tabulaciones) por guiones. Para quitar específicamente las letras minúsculas ASCII, usa [a-z]. De forma predeterminada, Java interpreta \p{Lower} como ASCII; solo incluye caracteres Unicode en minúscula cuando está habilitado el comportamiento de clases de caracteres Unicode.

Reemplazar varios caracteres en una cadena usando String.replace() en Java

String.replace(target, replacement) busca una secuencia literal de caracteres, no una expresión regular. Cada llamada reemplaza todas las apariciones del objetivo y devuelve una cadena nueva; las cadenas de Java son inmutables. Encadenar llamadas resulta útil cuando cada objetivo tiene su propia sustitución. Las llamadas se ejecutan de izquierda a derecha, por lo que una sustitución anterior puede crear texto que coincida con el objetivo de una llamada posterior.

Por ejemplo, si partimos de "javbjavcjadakavajavc", la cadena de llamadas input.replace("b", "a").replace("c", "a").replace("d", "v").replace("k", "j") produce javajavajavajavajava. Elige replace() cuando los objetivos sean cadenas literales y resulte más claro especificar cada sustitución por separado; usa replaceAll() cuando una expresión regular pueda describir conjuntamente los caracteres que quieres cambiar.

Reemplazar varios caracteres en una cadena usando String.replaceFirst() en Java

String.replaceFirst(regex, replacement) también recibe una expresión regular, pero cambia solo la primera coincidencia por llamada. Si vuelves a llamar al método, la siguiente búsqueda de la expresión regular se realiza sobre la cadena devuelta por la llamada anterior. Esto puede ser útil cuando quieres controlar intencionadamente el número y el orden de los cambios.

Por ejemplo, "This is a sample string.".replaceFirst("i", "1").replaceFirst("s", "2") devuelve Th12 is a sample string. La primera llamada cambia la i de This; después, la segunda cambia la primera s de la cadena actualizada, que es la s de This. Usa replaceFirst() para cambiar solo la primera coincidencia; usa replaceAll() cuando quieras cambiar todas.

Conclusión

Para reemplazar varios caracteres seleccionados, usa una clase de caracteres de expresión regular con String.replaceAll() para cambiar todas las coincidencias. Encadena llamadas a String.replace() para sustituciones literales y elige String.replaceFirst() cuando cada llamada deba afectar únicamente a la primera coincidencia de la expresión regular.