Exibir quantas vezes uma palavra apareceu em uma frase usando mapas

galera to com a seguinte duvida, tenho que implementar um metodo que recebe uma frase e retorna um mapa mostrando quantas vezes cada palavra apareceu na frase,

alguem saca como fazer isso?

Bom, eu pensei agora em algo como o seguinte:

Quebra a frase em palavras usando split, que retorna um String[].
Percorre esse vetor, utilizando a seguinte lógica:

Se a palavra não está no mapa, adiciona ela como chave e com valor 1.

Se a palavra já está no mapa, atualiza seu valor para valor anterior + 1.

Problema resolvido…ou não?

[quote=rod.attack]Bom, eu pensei agora em algo como o seguinte:

Quebra a frase em palavras usando split, que retorna um String[].
Percorre esse vetor, utilizando a seguinte lógica:

Se a palavra não está no mapa, adiciona ela como chave e com valor 1.

Se a palavra já está no mapa, atualiza seu valor para valor anterior + 1.

Problema resolvido…ou não?[/quote]

rapaz eu fiz isso,
o problema é que as vezes funciona e as vezes nao,
abaixo segue a execuçao e o codigo,

[code]
Frase frase = new Frase(“o rato e o rato”);

public Map<String, Integer> contaPalavras(){
String[] palavras = frase.split(" ");
int valor=1;
for (String p : palavras){
if (frequencia.containsKey§)
frequencia.put(p, valor++);
frequencia.put(p, valor);
}
return frequencia;
}[/code]

a saída é essa

{e=1, rato=3, o=2}

eu nao sei o que tá acontecendo =/

eis que surge outra duvida,

como ordenar um hashset de string por ordem alfabetica?

Primeiro passo é dividir o texto em pedaços e limpar os pedaços (excluir pontos, vírgulas e etc…)
Segundo passo:

frequencia.put(p,frequencia.get(p) + 1)

[quote=paulosouto]eis que surge outra duvida,

como ordenar um hashset de string por ordem alfabetica?[/quote]
Transforme em uma Lista. :lol:

[quote]paulosouto wrote:
eis que surge outra duvida,

como ordenar um hashset de string por ordem alfabetica?

[quote]java.lang.JJunior
Transforme em uma Lista.[/quote] [/quote]

No caso apresentado apenas mude de HashSet para TreeSet

Att

[quote=paulosouto][quote=rod.attack]Bom, eu pensei agora em algo como o seguinte:

Quebra a frase em palavras usando split, que retorna um String[].
Percorre esse vetor, utilizando a seguinte lógica:

Se a palavra não está no mapa, adiciona ela como chave e com valor 1.

Se a palavra já está no mapa, atualiza seu valor para valor anterior + 1.

Problema resolvido…ou não?[/quote]

rapaz eu fiz isso,
o problema é que as vezes funciona e as vezes nao,
abaixo segue a execuçao e o codigo,

[code]
Frase frase = new Frase(“o rato e o rato”);

public Map<String, Integer> contaPalavras(){
String[] palavras = frase.split(" ");
int valor=1;
for (String p : palavras){
if (frequencia.containsKey§)
frequencia.put(p, valor++);
frequencia.put(p, valor);
}
return frequencia;
}[/code]

a saída é essa

{e=1, rato=3, o=2}

eu nao sei o que tá acontecendo =/[/quote]

Sua lógica está quase correta. Mas faltou um else ali dentro do for, não?

E você pode utilizar um TreeMap se deseja que as chaves fiquem em ordem alfabética.