Un programa que te cuente las letras de una palabra

Respuesta de
luk_tk
a
Usuario
Buenos días, necesito hacer un programa que cuente las letras de una palabra y me diga que palabras son en java por ejemplo:
Inserto la palabra Vaca y me devuelva, ¿4 Vaca o Vaca 4. Como lo puedo hacer?
GRacias
Avatar
Experto
Hola,
lo puedes hacer del siguiente modo:
1) La palabra la almacenas como String:
    String palabra;
2) La clase String tiene un montón de métodos, que puedes consultar en la API: http://download.oracle.com/javase/1.5.0/docs/api/
   para saber el número de caracteres (longitud de la cadena) se utiliza el método length();
este método devuelve un entero que puedes mostrar por pantalla.
Espero que te sirva, un saludo;
Usuario
Buenas mira, tengo otra dudilla tengo hecho esto, pero lo que quiero, no se si eso se puede es lo siguiente:
Poner en una rista todos los caracteres del alfabeto y al pasarle una palabra por teclado me devuelva la cantidad de caracteres repetidos de esa palabra, por ejemplo
palabra por teclado : agua
que me devuelva:
la cantidad de letras a= 2
la cantidad de letras g=1
La cantidad de letras u= a
Tengo esto pero solo es para las vocales y quería buscar algo más simplificado que englobe todo el alfabeto español, porque si lo hago una por una seria mucho código, ¿me puedes ayudar?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        /** Frase a analizar */
        BufferedReader lectura = new BufferedReader(new InputStreamReader(System.in));
        String frase;
        System.out.println("Ponga una frase por favor: ");
        frase = lectura.readLine();
        
        /**
         * Declaramos e iniciamos las variables
         * para contar las vocales
         */
        int a, e, i, o, u,;
        a = e = i = o = u = 0;
        /**
         * Obtenemos la longitud de la cadena
         */
        int longitud = frase.length();
        /**
         * Declaramos e iniciamos el indice
         * que recorrerá la cadena
         */
        int indice = 0;
        /**
         * Al obtener la letra la almacenamos en
         * la variable letra para compararla.
         */
        char letras;
        do {
            letras = frase.charAt(indice);
            switch(letras) {
            case 'a':
            case 'á':
            case 'A':
                a++;
                break;
            case 'e':
            case 'é':
            case 'E':
                e++;
                break;
            case 'i':
            case 'í':
            case 'I':
                i++;
                break;
            case 'o':
            case 'ó':
            case 'O':
                o++;
                break;
            case 'u':
            case 'ú':
            case 'U':
                u++;
                break;
            default:
                break;
            }
            indice++;
        }while(indice < longitud);
        System.out.println("El número de letras 'a' es: " + a);
        System.out.println("El número de letras 'e' en: " + e);
        System.out.println("El número de letras 'i' es: " + i);
        System.out.println("El número de letras 'o' es: " + o);
        System.out.println("El número de letras 'u' es: " + u);
        
        
    }
}
Avatar
Experto
Hola,
lo que se me ocurre es que utilices árboles. Pasas una cadena, y se crea un árbol. Los nodos del árbol serán una letra perteneciente a esa cadena y el número de veces que aparece. Lees la cadena carácter a carácter. A la vez, inicializas un árbol. La raíz estará vacía, cuando lea el primer carácter, la raíz será ese carácter y se incrementará su contador. Lee el segundo carácter, si está en el árbol, incrementa el contador de dicho carácter, si no está, lo añade al árbol. Seria algo así:
1) Leo el carácter.
2) Compruebo si está en el árbol.
3) Si NO está, lo añado.
4) Si está, incremento su contador.
5) Vuelvo al paso 1) hasta llegar al final de la cadena.
Una vez construido el árbol, solo lo tienes que recorrer e ir mostrando por pantalla el carácter y el número de repeticiones. Puedes añadir elementos al árbol por orden de aparición o alfabéticamente.
Espero que te sirva, un saludo.
Usuario
mmm, seria una manera, pero no sabría como hacerlo la verdad, me podrías ayudar un poco en su implementación, de la otra manera si pero de esta, que parece más efectiva no sabría. Puedes ayudarme
Usuario
No hay problema ya casi lo tengo, muchas gracias, lo que una duda, en base a lo anterior, que prácticamente lo tengo ya encontré la manera, tengo que crear dos vectores de puntero y hacer la estructura para que haga el recorrido del vector, ¿eso cómo seria? Porque claro no voy a declarar una variable por cada letra, sino un vector para todo el abecedario, pero no sabría como hacer ese paso en realidad, porque lo anterior es el programa de prueba el main, pero esto del vector seria ya la implementación. ¿Me podrías decir como podría declararlo?
Gracias
Avatar
Experto
Hola,
en java no hay punteros. Para declarar el vector, es muy simple, en la clase en la que estés trabajando declaras:
Vector vector = new Vector();
para añadir objetos:
vector.add(Object);
Donde Object puede ser un tipo de java (int, float, char, String...) o bien un objeto que tu hayas definido (una clase, con su constructor).
   Si vas a guardar objetos, te recomiendo que utilices ArrayList, en vez de la clase Vector. Puedes consultar el funcionamiento en la API de Java:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html