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();
}
}
Nenhum comentário:
Postar um comentário