Utilizando a classe Collator
Publicado por Mariana Ribeiro Mendes (última atualização em 01/10/2012)
[ Hits: 7.284 ]
Este algoritmo conta quantas vogais e quantas consoantes há em uma frase de 80 caracteres, considerando ç/Ç e vogais acentuadas.
Para resolver o problema com comparações de vogais acentuadas e o ç/Ç eu utilizei a classe Collator (java.text.Collator), saiba mais aqui:
http://docs.oracle.com/javase/7/docs/api/java/text/Collator.html
Basicamente, a classe Collator é um comparador de Strings sensitivos à localização.
Neste algoritmo eu a utilizei da forma mais simples possível, com sua localização Default.
P.S: Agradecimento especial ao rei_astro, que me deu dicas valiosas (que me levou à classe Collator) e puxões de orelha que se transformaram numa melhora substancial do código em relação à alguns métodos que prendiam a execução.
Espero que gostem e lhes seja útil.
Qualquer dúvida ou crítica, sintam-se livres para me contatar.
Abraços.
import java.text.Collator; import java.util.Scanner; public class LetrasCollator { static Collator collator = Collator.getInstance(); public static boolean testeConsoante(String letra){ if (collator.compare(letra, "ç") == 0){ return true; } return false; } //verifica as vogais com acento utilizando o método compare() da classe Collator public static boolean testeVogal(String letra){ switch (letra) { case "á": if (collator.compare(letra, "á") == 0){ return true; } case "à": if (collator.compare(letra, "à") == 0){ return true; } case "â": if (collator.compare(letra, "â") == 0){ return true; } case "ã": if (collator.compare(letra, "ã") == 0){ return true; } case "é": if (collator.compare(letra, "é") == 0){ return true; } case "è": if (collator.compare(letra, "è") == 0){ return true; } case "ê": if (collator.compare(letra, "ê") == 0){ return true; } case "ẽ": if (collator.compare(letra, "ẽ") == 0){ return true; } case "í": if (collator.compare(letra, "í") == 0){ return true; } case "ì": if (collator.compare(letra, "ì") == 0){ return true; } case "ó": if (collator.compare(letra, "ó") == 0){ return true; } case "ò": if (collator.compare(letra, "ò") == 0){ return true; } case "ô": if (collator.compare(letra, "ô") == 0){ return true; } case "õ": if (collator.compare(letra, "õ") == 0){ return true; } case "ú": if (collator.compare(letra, "ú") == 0){ return true; } case "ù": if (collator.compare(letra, "ù") == 0){ return true; } } return false; } //verifica as vogais sem acento public static boolean verificaVogal(char v) { switch (v) { case 'a': return true; case 'e': return true; case 'i': return true; case 'o': return true; case 'u': return true; } return false; } //faz a contagem das letras public static String contaLetras(String frase) { int vogal = 0, consoante = 0; for (int cont = 0; cont < frase.length(); cont++) { //verifica se determinada letra está entre 'a' e 'z' if (((frase.toLowerCase().charAt(cont) >= 'a') && (frase.toLowerCase().charAt(cont) <= 'z'))) { //verifica se é uma vogal sem acento if (verificaVogal(frase.toLowerCase().charAt(cont))) { vogal++; } else { consoante++; } } else { Character letra = frase.charAt(cont); String l = letra.toString(); //verifica se é um ç/Ç if (testeConsoante(l.toLowerCase())){ consoante++; } //verifica se é uma vogal com acento if (testeVogal(l.toLowerCase())){ vogal++; } } } return "Vogais: " + vogal + " Consoante: " + consoante; } public static void inicio() { String frase, teste; Scanner in = new Scanner(System.in); do{ do { System.out.println("Entre com a frase, por favor. Não utilize acentos e não ultrapasse o limite de 80 caracteres"); frase = in.nextLine(); if (frase.length() > 80) { System.out.println("A frase contém mais que 80 caracteres. "); } } while (frase.length() > 80); System.out.println(contaLetras(frase)); do { System.out.println("Deseja fazer outro teste? [s/n]"); teste = in.nextLine(); if (teste.toLowerCase().equals("s") || teste.toLowerCase().equals("n")) { if (teste.toLowerCase().equals("n")) { System.out.println("Fim do programa..."); } } else { System.out.println("Informação Inválida! Digite apenas 's' ou 'n'."); } } while (!((teste.toLowerCase().equals("s")) || (teste.toLowerCase().equals("n")))); } while(!(teste.toLowerCase().equals("n"))); } public static void main(String[] args) { inicio(); } }
Cronômetro e/ou agendador de tarefas em Java
Mensagem usando opção gráfica JOptionPane
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta