Utilizando a classe Collator

Publicado por Mariana Ribeiro Mendes (última atualização em 01/10/2012)

[ Hits: 7.297 ]

Download LetrasCollator.java




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.

  



Esconder código-fonte

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

    }

}

Scripts recomendados

Fatorial Recursivo em Java

Calculadora básica e simples de entender

Cronômetro e/ou agendador de tarefas em Java

Utilizando o Switch

Comando for


  

Comentários
[1] Comentário enviado por facb69 em 01/10/2012 - 10:30h

Parabéns pela publicação, Mariana. Compartilhar conhecimento é uma das atitudes mais legais de um ser humano.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts