Encontrando Múltiples Ocurrencias de una Palabra
Ahora que entendemos los conceptos básicos de usar indexOf() para encontrar una sola ocurrencia de una palabra, mejoremos nuestras habilidades aprendiendo cómo encontrar todas las ocurrencias de una palabra en una cadena.
Entendiendo la Segunda Firma del Método indexOf()
El método indexOf() tiene otra forma útil:
int indexOf(String str, int fromIndex)
Esta versión te permite especificar una posición de inicio para la búsqueda. Al usar esta forma, podemos encontrar todas las ocurrencias de una palabra comenzando cada nueva búsqueda desde donde la dejamos.
Creando un Programa de Búsqueda Múltiple
Creemos un nuevo programa Java que encuentre todas las ocurrencias de una palabra específica:
- Crea un nuevo archivo llamado
MultipleFinder.java
- Introduce el siguiente código:
public class MultipleFinder {
public static void main(String[] args) {
// Crea un texto de ejemplo con múltiples ocurrencias de una palabra
String paragraph = "Java is a popular programming language. Java runs on various platforms. " +
"Java is used for developing web applications, mobile apps, and more. " +
"Learning Java is essential for many software development roles.";
System.out.println("Texto original:");
System.out.println(paragraph);
System.out.println("\nBuscando todas las ocurrencias de 'Java':");
// Encuentra todas las ocurrencias de "Java"
String searchWord = "Java";
int position = 0;
int count = 0;
// Bucle hasta que no se encuentren más ocurrencias
while (position != -1) {
position = paragraph.indexOf(searchWord, position);
if (position != -1) {
count++;
System.out.println("Ocurrencia " + count + " encontrada en la posición: " + position);
// Avanza más allá de esta ocurrencia para encontrar la siguiente
position += searchWord.length();
}
}
System.out.println("\nTotal de ocurrencias encontradas: " + count);
}
}
Compilando y Ejecutando el Programa de Búsqueda Múltiple
Ahora, compilemos y ejecutemos nuestro nuevo programa:
- En la terminal, compila el archivo Java:
javac MultipleFinder.java
- Ejecuta el programa compilado:
java MultipleFinder
Deberías ver una salida similar a:
Texto original:
Java is a popular programming language. Java runs on various platforms. Java is used for developing web applications, mobile apps, and more. Learning Java is essential for many software development roles.
Buscando todas las ocurrencias de 'Java':
Ocurrencia 1 encontrada en la posición: 0
Ocurrencia 2 encontrada en la posición: 42
Ocurrencia 3 encontrada en la posición: 72
Ocurrencia 4 encontrada en la posición: 149
Total de ocurrencias encontradas: 4
Cómo Funciona el Programa
Desglosemos cómo este programa encuentra todas las ocurrencias:
- Establecemos la posición de búsqueda inicial en 0 (el principio de la cadena)
- Entramos en un bucle
while que continúa hasta que indexOf() devuelve -1 (no más coincidencias)
- Para cada coincidencia, hacemos lo siguiente:
- Imprimimos la posición donde encontramos la palabra
- Actualizamos la posición de búsqueda para comenzar después de la coincidencia actual agregando la longitud de la palabra de búsqueda
- El bucle continúa hasta que no se encuentran más coincidencias
- Finalmente, imprimimos el número total de ocurrencias encontradas
Manejo de la Sensibilidad a Mayúsculas y Minúsculas
El método indexOf() es sensible a mayúsculas y minúsculas por defecto. Modifiquemos nuestro programa para realizar una búsqueda que no distinga entre mayúsculas y minúsculas convirtiendo tanto el texto como el término de búsqueda a minúsculas:
Añade estas líneas a MultipleFinder.java justo después de que comience el método main:
// Demostración de búsqueda sin distinción entre mayúsculas y minúsculas
System.out.println("\n--- Búsqueda sin distinción entre mayúsculas y minúsculas ---");
String lowercaseParagraph = paragraph.toLowerCase();
String lowercaseSearchWord = searchWord.toLowerCase();
position = 0;
count = 0;
while (position != -1) {
position = lowercaseParagraph.indexOf(lowercaseSearchWord, position);
if (position != -1) {
count++;
System.out.println("Ocurrencia " + count + " encontrada en la posición: " + position);
position += lowercaseSearchWord.length();
}
}
System.out.println("\nTotal de ocurrencias encontradas (sin distinción entre mayúsculas y minúsculas): " + count);
Compila y ejecuta el programa actualizado:
javac MultipleFinder.java
java MultipleFinder
La salida ahora incluirá tanto los resultados de búsqueda con distinción entre mayúsculas y minúsculas como los resultados de búsqueda sin distinción entre mayúsculas y minúsculas.