Utilizando a classe Collator
Publicado por Mariana Ribeiro Mendes (última atualização em 01/10/2012)
[ Hits: 7.494 ]
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(); } }
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (9)
Problema com Conexão Outlook via Firewall (OpenSUSE) com Internet Fibr... (5)