ola pessoal gostaria de saber se alguem pode me ajudar nesse codigo aqui, queria saber como posso verificar quantas palavras iguais ao que eu
passar por parametro, existem no texto
int contaPalavras(String palavra){
int tamanho = _meuString.length();
int i = 0;
int contPalavraIguaisAoPr = 0;
while(i<tamanho){
if(_meuString.indexOf(palavra) >=0 ){
contPalavraIguaisAoPr++;
}
i++;
}
if(contPalavraIguaisAoPr == 0){
System.out.println("palavra inexistente");
}
return contPalavraIguaisAoPr;
}
no caso aqui eu ja suponho que tenho um construtoar criado e que recebe esse texto ou frase por ele,
ai por exemplo quero saber quantas palavras dia tem nessa frase “Tem dia que parece dia de feira.”
o metodo deve retornar 2.
alguem pode ajudar?
detaçhe aqui ele naum esta conseguindo fazer a comparação, ele vai direto para paçavra inexistente
1 curtida
Cara…
Pesquise um pouco sobre o metodo split()
Fiz essa código agora rápido, espero que ajude.
public static int contaPalavras(String palavra){
int quant = 0;
String texto="Tem dia que parece dia de feira.";
String [] arrayString = texto.split(" ");
for(int i=0;i<arrayString.length;i++){
if(arrayString[i].equals(palavra)){
quant++;
}
}
return quant;
}
public static void main(String[] args) {
System.out.println(contaPalavras("dia"));
}
abraaaaço
só complementando o que o alanmateus disse (concordo plenamente com o código dele)
o método .split usado na quarta linha: String [] arrayString = texto.split(" ");
O que ele faz? Ele quebra a palavra nos locais do espaço, e cada palavra vai complementando o vetor.
Nesse caso:
arrayString[0] = "Tem"
arrayString[1] = "dia"
arrayString[2] = "que"
arrayString[3] = "parece"
arrayString[4] = "dia"
arrayString[5] = "de"
arrayString[6] = "feira."
Depois ele vai e percorre esse vetor, verificando o que tá escrito em cada um, e comparando a palavra a ser procurada (no caso dia)
public static int contaPalavras(String texto, String palavra, boolean caseSensitive) {
//usando stringbuffer por ser sincronizado...
StringBuffer buffer = new StringBuffer();
StringBuffer textoBuffer = new StringBuffer();
char[] chs = palavra.toCharArray();
for (char c : chs) {
buffer.append("[");
if (caseSensitive) {
buffer.append(Character.toString(c));
} else {
if (Character.isLetter(c)) {
buffer.append(Character.toString(c).toLowerCase());
buffer.append(Character.toString(c).toUpperCase());
} else {
buffer.append(Character.toString(c));
}
}
buffer.append("]");
}
textoBuffer.append(texto);
//se o ultimo item do texto nao eh a palavra que estamos contando, subtrair 1 para
//nao dar errado
int len = textoBuffer.toString().split(buffer.toString()).length;
if (!texto.substring(texto.length() - palavra.length(), texto.length()).equals(palavra)) {
len--;
}
return len;
}
Presentinho pra vc…
Note que esta funcao ira contar a quantidade de ocorrencias de PALAVRA em TEXTO, por exemplo:
EU NAO SEI SE A VACA VOA, MAS SE ELA VOAR EU VOU CORRER
Se vocer bucar por “VOA” vai encontrar 2 ocorrencias, estou usando expressoes regulares para dar o split e depois simplesmente pegando o tamanho do vetor gerado. como no exemplo assima, se procurar por VOA com caseSensitive = true, ele vai gerar uma regexp assim: [V][O][A], se for false, vai ficar assim: [Vv][Oo][Aa].
De uma lida sobre expressoes regulares que podera mudar a funcao para incluir os separadores usuais (.,!? ) etc.
[]s
Kemper
1 curtida
ok pessoal valew consegui resolver aqui, vou pesquisar sim sobre o split, vou postar o que fiz para poder ajudar quem tb precisar:
int contaPalavras(String palavra){
boolean existe = true;
int indice;
int count = 0;
String _meuStringCopy = _meuString;
while(existe == true){
if(_meuStringCopy.indexOf(palavra) >= 0){
indice = _meuStringCopy.indexOf(palavra) + 1;
if(indice < _meuStringCopy.length())
_meuStringCopy = _meuStringCopy.substring(indice, _meuStringCopy.length());
count++;
}
else
existe = false;
}
return count;
}
obrigado pela ajuda!!