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

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());
  }
}

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

Não estou conseguindo exibir as palavras duplicadas

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));

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

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

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

2 curtidas

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 ?

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

1 curtida

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

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.