Encontrando Múltiplas Ocorrências de uma Palavra
Agora que entendemos os conceitos básicos de como usar indexOf() para encontrar uma única ocorrência de uma palavra, vamos aprimorar nossas habilidades aprendendo como encontrar todas as ocorrências de uma palavra em uma string.
Entendendo a Segunda Assinatura do Método indexOf()
O método indexOf() tem outra forma útil:
int indexOf(String str, int fromIndex)
Esta versão permite que você especifique uma posição inicial para a pesquisa. Ao usar esta forma, podemos encontrar todas as ocorrências de uma palavra, começando cada nova pesquisa de onde paramos.
Criando um Programa de Pesquisa Múltipla
Vamos criar um novo programa Java que encontra todas as ocorrências de uma palavra específica:
- Crie um novo arquivo chamado
MultipleFinder.java
- Insira o seguinte código:
public class MultipleFinder {
public static void main(String[] args) {
// Crie um texto de exemplo com múltiplas ocorrências de uma palavra
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("Original text:");
System.out.println(paragraph);
System.out.println("\nSearching for all occurrences of 'Java':");
// Encontre todas as ocorrências de "Java"
String searchWord = "Java";
int position = 0;
int count = 0;
// Loop até que não sejam encontradas mais ocorrências
while (position != -1) {
position = paragraph.indexOf(searchWord, position);
if (position != -1) {
count++;
System.out.println("Occurrence " + count + " found at position: " + position);
// Mova-se após esta ocorrência para encontrar a próxima
position += searchWord.length();
}
}
System.out.println("\nTotal occurrences found: " + count);
}
}
Compilando e Executando o Programa de Pesquisa Múltipla
Agora vamos compilar e executar nosso novo programa:
- No terminal, compile o arquivo Java:
javac MultipleFinder.java
- Execute o programa compilado:
java MultipleFinder
Você deve ver uma saída semelhante a:
Original text:
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.
Searching for all occurrences of 'Java':
Occurrence 1 found at position: 0
Occurrence 2 found at position: 42
Occurrence 3 found at position: 72
Occurrence 4 found at position: 149
Total occurrences found: 4
Como o Programa Funciona
Vamos detalhar como este programa encontra todas as ocorrências:
- Definimos a posição inicial da pesquisa como 0 (o início da string)
- Entramos em um loop while que continua até que
indexOf() retorne -1 (sem mais correspondências)
- Para cada correspondência, nós:
- Imprimimos a posição onde encontramos a palavra
- Atualizamos a posição da pesquisa para começar após a correspondência atual, adicionando o comprimento da palavra de pesquisa
- O loop continua até que não sejam encontradas mais correspondências
- Finalmente, imprimimos o número total de ocorrências encontradas
Lidando com a Sensibilidade a Case
O método indexOf() é sensível a case por padrão. Vamos modificar nosso programa para realizar uma pesquisa sem distinção entre maiúsculas e minúsculas, convertendo o texto e o termo de pesquisa para minúsculas:
Adicione estas linhas a MultipleFinder.java logo após o início do método main:
// Demonstração de pesquisa sem distinção entre maiúsculas e minúsculas
System.out.println("\n--- Case-insensitive search ---");
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("Occurrence " + count + " found at position: " + position);
position += lowercaseSearchWord.length();
}
}
System.out.println("\nTotal occurrences found (case-insensitive): " + count);
Compile e execute o programa atualizado:
javac MultipleFinder.java
java MultipleFinder
A saída agora incluirá os resultados da pesquisa com e sem distinção entre maiúsculas e minúsculas.