Utilizando a classe Collator
Publicado por Mariana Ribeiro Mendes (última atualização em 01/10/2012)
[ Hits: 7.629 ]
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();
}
}
Retorno de nomes (com gráficos)
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Secure boot, artigo interessante, nada técnico. (5)
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









