Preciso de ajuda nesse código para identificar e exibir as palavra duplicadas em uma tabela hash? Segue o código abaixo

10 respostas Resolvido
javaprogramação
loudhp

Identificar palavras duplicadas em uma frase utilizando uma Tabela Hash. Depois exibir essas palavras duplicadas e tratar de forma diferente letras minúsculas e maiúsculas, ignorando a pontuação.

import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.TreeSet;
import java.util.Scanner;

public class Exercicio {
  public static void main(String[] args) {
    Map<String, Integer> myMap = new HashMap<String, Integer>();
    createMap(myMap);
    displayMap(myMap);
  } 
  
  private static void createMap(Map<String, Integer> map) {
    Scanner scanner = new Scanner(System.in); 
    
    System.out.println("Digite uma string:");
    String input = scanner.nextLine();
    String[] tokens = input.split(" ");
    
    for (String token : tokens) {
      String word = token.toLowerCase();
      
      if (map.containsKey(word)) {
        int count = map.get(word);
        map.put(word, count + 1);
      } else
        map.put(word, 1);
    }
    
    scanner.close();
  }
  
  private static void displayMap(Map<String, Integer> map) {
    Set<String> keys = map.keySet();
    TreeSet<String> sortedKeys = new TreeSet<String>(keys);
    
    System.out.println("\nMapa contém:\nChave\t\tValor");
    
    for (String key : sortedKeys)
      System.out.printf("%-10s%10s\n", key, map.get(key));
    
    System.out.printf("\ntamanho: %d\nestá vazio: %b\n", map.size(), map.isEmpty());
  }
}

10 Respostas

Lucas_Camara

Não entendi. O código parece que está fazendo o que deve ser feito. Qual a dúvida?

loudhp

Não estou conseguindo exibir as palavras duplicadas

Lucas_Camara

Pelo que parece, o método displayMap está fazendo isso, e está imprimindo tb a quantidade de vezes que a palavra repetiu. Nessa linha:

System.out.printf("%-10s%10s\n", key, map.get(key));
loudhp

Sim, mas não tá exibindo as palavras repetidas, só mostra quantas vezes as palavras aparece

loudhp

Sim, mas não tá exibindo as palavras repetidas, só mostra quantas vezes que as palavras aparecem

hugokotsubo

Não é só fazer um if? Se a quantidade de vezes que a palavra aparece for maior que 1, é porque ela se repete. Algo como if (map.get(key) > 1) imprime key

loudhp

Obrigado, você sabe algum método para tratar de forma diferente letras minúsculas e maiúsculas ,estou com esse aqui String word = token.toLowerCase(); mas ignora ?

hugokotsubo
Solucao aceita

É só não usar toLowerCase. Use o token da forma que está…

loudhp

Muito obrigado! Só mais uma duvida que método você me indicaria para ignorar a pontuação nesse código

hugokotsubo

Depende muito do que vc quer fazer, pois “ignorar a pontuação” é meio genérico.

Se for para eliminar tudo que não for letra, por exemplo (talvez com replace ou replaceAll), vc pode acabar quebrando palavras compostas ou até com apóstrofo (como “gota d’água” ou “beija-flor”).

Eu sugiro abrir outro tópico, já que é uma discussão totalmente diferente.

Criado 25 de janeiro de 2022
Ultima resposta 27 de jan. de 2022
Respostas 10
Participantes 3