Olá pessoal.
Estive pesquisando bastante algoritmos de busca em cadeias de caracteres, afinal o que eu precisava era varrer um texto qualquer e contar as ocorrências de determinada palavra.
Encontrei muitos trabalhos acadêmicos elucidando o assunto, mas muito genéricos e pouco didáticos. Isso até me deu idéia pra com auxílio de um professor, escrever um artigo científico com exemplos práticos pra elucidar de uma vez por todas esse conceito.
Após vários testes de mesa consegui fazer o código abaixo:
//parametros de entrada: frase e palavras informadas pelo usuário.
public static void questao03(String frase, String palavra) {
//A cada ocorrencia da palavra na frase, este contador incrementa +1.
int contadorPalavra = 0;
//Auxiliar para iterar sobre cada letra da palavra informada.
int aux= 0;
//A cada letra da frase que coincide com uma letra da palavra, este contador incrementa +1.
//Quando o valor deste contador ser igual ao .length da palavra, incrementa +1 na variável contadorPalavra.
int contadorLetrasPalavra = 0;
for (int i = 0; i < frase.length(); i++) {
if (frase.charAt(i) == palavra.charAt(aux)) {
contadorLetrasPalavra++;
aux++;
if (contadorLetrasPalavra == palavra.length()) {
contadorPalavra++;
aux = 0;
contadorLetrasPalavra = 0;
}
} else {
aux = 0;
contadorLetrasPalavra = 0;
}
}
if (contadorPalavra != 1) {
JOptionPane.showConfirmDialog(null, "Foram encontradas "+contadorPalavra+" correspondências à palavra informada.");
} else
JOptionPane.showConfirmDialog(null, "Foi encontrada "+contadorPalavra+" correspondência à palavra informada.");
}
Claro, existem muitos métodos prontos do Java pra fazer esse trabalho por mim, porém estou finalizando o 1º semestre e preciso fazer tudo na mão.
Por hora esse foi o método que encontrei, não é performático, mas foi o que consegui fazer num domingo de tarde chuvosa…
Minha dúvida era mais a nível de projetar do que implementar, não conseguia fazer um algorítmo pra esse problema. Programo esporadicamente em Java há quase um ano, ainda sou estagiário e não tenho muita experiência com lógica.
