Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Antoniio en 24 Abril 2016, 23:04 pm



Título: Saber cuántas veces se repiten letras
Publicado por: Antoniio en 24 Abril 2016, 23:04 pm
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:
(http://i.imgur.com/roKYoHw.png)

*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


Título: Re: Saber cuántas veces se repiten letras
Publicado por: LaiaxanIV en 25 Abril 2016, 00:32 am
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
  1. int[] cont = new int[25]; //Inicialo a 0 tmbien
  2. String texto = "hola"; //Si el texto tiene mayúsculas, asegurate de hacer la comprobación
  3. for(int i = 0; i < s.size(); ++i){
  4.   ++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.
  5. }
  6.  


Título: Re: Saber cuántas veces se repiten letras
Publicado por: 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..


Título: Re: Saber cuántas veces se repiten letras
Publicado por: ivancea96 en 25 Abril 2016, 12:15 pm
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.


Título: Re: Saber cuántas veces se repiten letras
Publicado por: + 1 Oculto(s) en 26 Abril 2016, 00:01 am
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


Título: Re: Saber cuántas veces se repiten letras
Publicado por: Antoniio en 26 Abril 2016, 05:40 am
Bien, hice esto:

Código:
    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:


Título: Re: Saber cuántas veces se repiten letras
Publicado por: + 1 Oculto(s) en 27 Abril 2016, 19:32 pm
coloca en un arreglo {a,b,......z} e itera sobre este arreglo

y no asi solamente sobre 'a'

se solucionaria ??


Título: Re: Saber cuántas veces se repiten letras
Publicado por: Antoniio en 27 Abril 2016, 20:00 pm
Exacto, ya lo tengo ! :3

Gracias !!!


Título: Re: Saber cuántas veces se repiten letras
Publicado por: + 1 Oculto(s) en 27 Abril 2016, 23:03 pm
de nada y que te vaya bien!!!