Cómo comprobar si una cadena contiene una subcadena en Java
- Comprobar si una cadena contiene una subcadena en Java
-
Encontrar la subcadena usando el
indexOf()
Mehtod en Java - Encontrar la subcadena usando Regex en Java
-
Encontrar la subcadena usando
Apache
en Java - Encontrar la subcadena usando Java Regex
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