Cómo comprobar si una cadena contiene una subcadena en Java

Mohammad Irfan 12 octubre 2023
  1. Comprobar si una cadena contiene una subcadena en Java
  2. Encontrar la subcadena usando el indexOf() Mehtod en Java
  3. Encontrar la subcadena usando Regex en Java
  4. Encontrar la subcadena usando Apache en Java
  5. Encontrar la subcadena usando Java Regex
Cómo comprobar si una cadena contiene una subcadena en Java

Este tutorial introduce cómo comprobar si una cadena contiene una subcadena en Java y enumera algunos códigos de ejemplo para entenderla.

Comprobar si una cadena contiene una subcadena en Java

Una cadena que es parte de otra cadena se conoce como subcadena para ese objeto cadena. Una cadena es una secuencia de caracteres y un objeto inmutable en Java. Comprobemos si existe una subcadena en la cadena dada.

En este ejemplo, usamos el método contains() de la clase String que devuelve true si se encuentra la subcadena de la cadena. Usamos el método toLowerCase() para comprobar si hay un caso de ignorar.

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.contains(subStr);
    System.out.println(containsStr);

    // Check with string ignore case
    subStr = "Daa";
    containsStr = str.toLowerCase().contains(subStr.toLowerCase());
    System.out.println(containsStr);

    subStr = "baa";
    containsStr = str.toLowerCase().contains(subStr.toLowerCase());
    System.out.println(containsStr);
  }
}

Resultado:

true
true
false

Encontrar la subcadena usando el indexOf() Mehtod en Java

El método indexOf() de la clase String se usa para obtener el índice de la subcadena en una cadena, pero podemos usarlo para encontrar la subcadena.

Aquí, comprobamos si el índice de la subcadena es mayor o igual a cero de lo que significa que se encuentra la subcadena. Si la subcadena no existe en la cadena, devuelve -1.

Mira el ejemplo y la salida.

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.indexOf(subStr) >= 0;
    System.out.println(containsStr);

    // check with string ignore case
    subStr = "DaA";
    containsStr = str.toLowerCase().indexOf(subStr.toLowerCase()) >= 0;
    System.out.println(containsStr);

    subStr = "aaa";
    containsStr = str.indexOf(subStr) >= 0;
    System.out.println(containsStr);
  }
}

Resultado:

true
true
false

Encontrar la subcadena usando Regex en Java

También podemos usar el método matches() del objeto String que toma regex como argumento y devuelve true o false.

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = str.matches("(?i).*" + subStr + ".*");
    System.out.println(containsStr);

    subStr = "daa";
    containsStr = str.matches("(?i).*" + subStr + ".*");
    System.out.println(containsStr);
  }
}

Resultado:

true
true

Encontrar la subcadena usando Apache en Java

Si usas la librería común Apache, entonces puedes usar el método containsIgnoreCase() de la clase StringUtils que devuelve true si se encuentra la subcadena, false en caso contrario. Mira el ejemplo de abajo.

import org.apache.commons.lang3.StringUtils;

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);

    subStr = "DAa";
    containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);

    subStr = "AcWF";
    containsStr = StringUtils.containsIgnoreCase(str, subStr);
    System.out.println(containsStr);
  }
}

Resultado:

true
true
false

Encontrar la subcadena usando Java Regex

Java provee un paquete regex que contiene varias clases y métodos. Una de estas clases es una clase Pattern que proporciona un par de métodos como compile(), quote(), matcher(), etc. Aquí usaremos estos métodos para encontrar subcadenas.

import java.util.regex.Pattern;

public class SimpleTesting {
  public static void main(String[] args) {
    String str = "abracadaabra";
    String subStr = "daa";
    boolean containsStr =
        Pattern.compile(Pattern.quote(subStr), Pattern.CASE_INSENSITIVE).matcher(str).find();
    System.out.println(containsStr);

    subStr = "RaCA";
    containsStr =
        Pattern.compile(Pattern.quote(subStr), Pattern.CASE_INSENSITIVE).matcher(str).find();
    System.out.println(containsStr);
  }
}

Resultado:

true
true

Artículo relacionado - Java String