Utilizando a classe Collator
Publicado por Mariana Ribeiro Mendes (última atualização em 01/10/2012)
[ Hits: 7.432 ]
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(); } }
Mensagem usando opção gráfica JOptionPane
Colocando informações em variáveis
Começando a trabalhar com arrays
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
firefox nao guarda meus logins nos sites (1)
Instalar debian testing (13) "por cima" do debian 12 (2)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (1)