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 é 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
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 ?
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.