Get the Flash Player to see this player.
Logo Design by
Logo Design by FlamingText.com

quarta-feira, 3 de outubro de 2012

Java: Utilizando a classe Collator


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();

    }

}


View the original article here

Nenhum comentário:

Postar um comentário