Saber cuántas veces se repiten letras

Iniciado por Antoniio, 24 Abril 2016, 23:04 PM

0 Miembros y 1 Visitante están viendo este tema.

Antoniio

Hola, buenas. Ando buscando la forma de saber cuántas letras del abecedario se repiten en cualquier archivo de texto que se lea en el programa. Ya hice la parte lectora del archivo, pero no se cómo contar las letras e imprimir el número de veces que se repite cada una.

Entonces, lo que tengo hasta ahora es esto:


*La idea es examinar el archivo (Hecho)
*Después Leerlo e imprimirlo (Hecho)
*Lo tercero es crear la frecuencia de letras, osea, cuántas veces sale "a", cuantas "b", etc. e imprimirlo en un JOptionPane o en una gráfica.(No Hecho)

Alguna sugerencia para llevar acabo la tercera parte??

Gracias de antemano !

Aquí el programa por si es necesario una revisión:
https://mega.nz/#!CJYVVRwI!MTb-vq_NBvxia7ZibDJoiE2YwmoVtPEOOEu4D_NxTsU

LaiaxanIV

Crea un array con tantas posiciones como letras del abecedario haya. Una vez, solo tienes que sumar uno a cada posición siempre que aparezca. Si restas a un char a, tendrás la posición que ocupa en tu array.
Ejemplo:
Código (java) [Seleccionar]

int[] cont = new int[25]; //Inicialo a 0 tmbien
String texto = "hola"; //Si el texto tiene mayúsculas, asegurate de hacer la comprobación
for(int i = 0; i < s.size(); ++i){
   ++cont[(Integer)s.charAt(i)-'a']; //Lo que haces es usar la posición en la tabla ascii. Al restarle la a que es la letra que ocupa la primera posición del abecedario, tendrás la posción que ocupa.
}

Antoniio

Pero no se leerá un String declarado, lo que se debe leer es cualquier txt que tenga en la pc..

ivancea96

Cita de: Antoniio en 25 Abril 2016, 08:10 AM
Pero no se leerá un String declarado, lo que se debe leer es cualquier txt que tenga en la pc..

Cita de: Antoniio
*La idea es examinar el archivo (Hecho)
*Después Leerlo e imprimirlo (Hecho)

Dices que ya lo has leído. Pues solo tienes que volcar el contenido en el String. En caso de que no lo quieras volcar todo de golpe, ve leyendo partes, y aplicándole el algoritmo ya mencionado.

Acerca del algoritmo arriba mencionado, cuidado, porque si lees un caracter que no sea una letra minúscula, te dará excepción. Lo mejor es que uses algo como HashMap<Character,Integer> para guardar las ocurrencias de cualquier caracter.

+ 1 Oculto(s)

que vas a leer del archivo txt? leeras string

pero no leeras solo un string asi que tienes que utilizar iteradores para leer todos los strings del txt

Antoniio

Bien, hice esto:

    try{
        FileReader fr = new FileReader(cajaTexto.getText());
        BufferedReader br = new BufferedReader(fr);
        String texto;
        while((texto=br.readLine())!=null){
           System.out.println(texto);
        }
        int c = 0;
        for(int i=0;i<texto.length();i++) {
          if ((texto.charAt(i)=='a')){
            c++;
  }
    System.out.println(  "La letra (a) se repite " + c + " veces en el archivo.");       
}
       
        }catch(Exception ex){}
    }             



Sería sólo para la letra "a" , entonces tendría que hacer un ciclo para cada letra del abecedario D:

+ 1 Oculto(s)

coloca en un arreglo {a,b,......z} e itera sobre este arreglo

y no asi solamente sobre 'a'

se solucionaria ??

Antoniio


+ 1 Oculto(s)