Java: Contando quantas vezes a palavra se repente em um texto

Como posso contar quantas vezes uma palavra, ou letra, se repetem em um determinado texto!?

Fiz dois métodos bem simples:
a) Usando indexOf, onde ele procura a ocorrência mais próxima da palavra.
b) Usando expressão regular.

Devem existr outras maneiras de se fazer isso, caso algúem conheça uma maneira mais fácil, entre em contato.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Search {

	public static void main(String[] args) {

		Search sr = new Search();

		// Texto
		String texto = "lucasTestelucastesteLucastesteucastestelucas";

		// Mostra
		System.out.println("Total:" + sr.countIndexOf(texto, "teste"));
		System.out.println("Total:" + sr.countExpressao(texto, "teste"));
	}

	// Contagem usando Expressao regular
	private int countExpressao(String texto, String valor) {
		int count = 0;

		if (texto != null) {
			// Onde registramos a expressão regular
			Pattern pattern = Pattern.compile(valor);

			// Onde registramos o comparador
			Matcher matcher = pattern.matcher(texto);

			// Loop para verificar o que foi encontrado
			while (matcher.find()) {
				count++;
			}
		}
		
		return count;

	}

	// Contagem usando INDEX OF
	private int countIndexOf(String texto, String valor) {
		int pos = 0;
		int count = 0;

		if (texto != null) {
			// Procura a proxima ocorrencia da palavra
			pos = texto.indexOf(valor);

			// Enquanto encontrar outras ocorrencias, ele soma contador
			while (pos >= 0) {
				++count;

				// Procura a proxima ocorrencia a partir do ultimo ponto
				pos = texto.indexOf(valor, pos + 1);
			}

		}

		return count;
	}
}

3 comentários em “Java: Contando quantas vezes a palavra se repente em um texto

  • 1 de outubro de 2014 em 09:28
    Permalink

    Achei isso muito legal; Java: Contando quantas vezes a palavra se repente em um texto
    02.14.2014
    Ok e se ao invés de verificar uma só palavra , fosse informado o total de cada palavra do texto, independente de quanta palavras o texto tenha?

    Seria melhor implememtar este seu metodo com um while para varrer o texto inteiro, ou teria outra forma para obter a quantidade DE CADA PALAVRA do texto?

    Obrigado

    Resposta
  • 1 de outubro de 2014 em 10:13
    Permalink

    Se eu entendi sua perguntar a programação ficaria assim:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Search {
    
    	public static void main(String[] args) {
    
    		Search sr = new Search();
    
    		// Texto
    		String texto = "Para contar quantas palavras existem no texto, primeiro temos que definir o que são palavras," +
    				" neste caso vou considerar que a palavra é a parte do texto que está separada por espaço, com exceção das virgulas, pontos etc...";
    		
    		
    		//Deixando tudo maisculo sem pontos e virgulas ou espaços no começo e fim
    		texto = texto.replaceAll("[,.]", "");
    		texto = texto.toUpperCase();
    		texto = texto.trim();
    		
    		//Próximo passo é separar as palavras
    		String[] palavras = texto.split(" ");
    		
    		//Fazendo um loop nas palavras
    		for (String palavra : palavras) {
    			//Coloquei espaco no comeco e no fim dos dois argumentos, para padronizar a busca e pegar somente palavras sozinhas
    			System.out.println("PALAVRA: " + palavra + " TOTAL:" + sr.countExpressao(" " + texto + " ", " " + palavra + " "));
    		}
    
    
    	}
    
    	// Contagem usando Expressao regular
    	private int countExpressao(String texto, String valor) {
    		int count = 0;
    
    		if (texto != null) {
    			// Onde registramos a expressão regular
    			Pattern pattern = Pattern.compile(valor);
    
    			// Onde registramos o comparador
    			Matcher matcher = pattern.matcher(texto);
    
    			// Loop para verificar o que foi encontrado
    			while (matcher.find()) {
    				count++;
    			}
    		}
    
    		return count;
    
    	}
    
    }
    

    Resultado:

    PALAVRA: PARA TOTAL:1
    PALAVRA: CONTAR TOTAL:1
    PALAVRA: QUANTAS TOTAL:1
    PALAVRA: PALAVRAS TOTAL:2
    PALAVRA: EXISTEM TOTAL:1
    PALAVRA: NO TOTAL:1
    PALAVRA: TEXTO TOTAL:2
    PALAVRA: PRIMEIRO TOTAL:1
    PALAVRA: TEMOS TOTAL:1
    PALAVRA: QUE TOTAL:4
    PALAVRA: DEFINIR TOTAL:1
    PALAVRA: O TOTAL:1
    PALAVRA: QUE TOTAL:4
    PALAVRA: SÃO TOTAL:1
    PALAVRA: PALAVRAS TOTAL:2
    PALAVRA: NESTE TOTAL:1
    PALAVRA: CASO TOTAL:1
    PALAVRA: VOU TOTAL:1
    PALAVRA: CONSIDERAR TOTAL:1
    PALAVRA: QUE TOTAL:4
    PALAVRA: A TOTAL:2
    PALAVRA: PALAVRA TOTAL:1
    PALAVRA: É TOTAL:1
    PALAVRA: A TOTAL:2
    PALAVRA: PARTE TOTAL:1
    PALAVRA: DO TOTAL:1
    PALAVRA: TEXTO TOTAL:2
    PALAVRA: QUE TOTAL:4
    PALAVRA: ESTÁ TOTAL:1
    PALAVRA: SEPARADA TOTAL:1
    PALAVRA: POR TOTAL:1
    PALAVRA: ESPAÇO TOTAL:1
    PALAVRA: COM TOTAL:1
    PALAVRA: EXCEÇÃO TOTAL:1
    PALAVRA: DAS TOTAL:1
    PALAVRA: VIRGULAS TOTAL:1
    PALAVRA: PONTOS TOTAL:1
    PALAVRA: ETC TOTAL:1
    
    Resposta
  • 1 de outubro de 2014 em 14:38
    Permalink

    Opa, quanta rapidez Lucas.
    Seu sobrenome deveria se EFICIÊNCIA rs rs rs , desculpa pela ousadia.
    Mais o que quero dizer mesmos é que sua lógica se encaixou perfeitamente no que estou fazendo.
    Lucas para não ficar só em MUITO OBRIGADO quero lhe deixar um convite para você conhecer um dos projetos (app) que estou finalizando, quem sabe, podemos somar forças. Maiores informações me procure via e-mail.
    Grato: Adelson Rescarolli.
    “As coisas complexas nada mais são do que a união das coisas simples.”

    Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blue Captcha Image
Atualizar

*

Facebook

Get the Facebook Likebox Slider Pro for WordPress
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera