Contar las vocales de un fichero en Java

15/Ene/2013 Java , , , , , 2 Comentarios

Para poder proceder a contar las vocales de un fichero en Java debemos ser capaces de leer el fichero y luego proceder a hacer el conteo de vocales.

Por tanto para hacer la lectura de un archivo en Java necesitamos lo siguiente:

  1. private String Filename="";
  2. private File file = null;
  3. private FileReader fr = null;
  4. private BufferedReader br = null;
  5. private List lines = new ArrayList();

Como se puede ver se hara uso de un nombre de archivo, un descriptor de archivo llamado file y de clase File, luego un FileReader llamado fr, y el BufferedReader denominado br.

Y ademas de todo lo anterior debemos hacer uso de una lista de las lineas de texto a leer del fichero en Java.

Luego de tener todo esto a detalle debemos tener las funciones de apertura de archivo tanto como cerrado de archivo (util para no dejar el descriptor del archivo abierto pues consume recursos).

La primera será un método para abrir el archivo. La cual instanciará el File, FileReader y BufferedReader.

  1. public void openFile() {
  2. try {
  3. file = new File(Filename);
  4. fr = new FileReader(file);
  5. br = new BufferedReader(fr);
  6. } catch (Exception ex) { }
  7. return;
  8. }

Y otra para cerrar el archivo, la cual ejecutará el método .close del fichero y pondrá las variables a null para que estén a disposición del garbage collector que llamaremos mediante System.gc()

  1. public void closeFile(){
  2. try {
  3. if(fr!=null) fr.close();
  4. br = null;
  5. file=null;
  6. System.gc();//llamada a garbage collector
  7. } catch (Exception ex) {}
  8. }

Otra cosa que necesitamos para contar las vocales de un fichero en Java es el método de lectura de archivo el cual lo implementamos con el uso del BufferedReader.
En el método de lectura tenemos que agregar cada una de las lineas leidas a la lista de lineas.

Las líneas las leemos utilizando el método .readLine()

  1. //lectura de archivo
  2. public void readFile(){
  3. String line="";
  4. try {
  5. if(br==null){
  6. openFile();
  7. }
  8. if(br!=null){
  9. while((line=br.readLine())!=null) {
  10. lines.add(line);//agregamos las lineas de texto en la lista de lineas
  11. }
  12. }
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. } finally {
  16. closeFile();//cerrar archivo
  17. }
  18. }

Y procedemos a la implementacion de un método de conteo de vocales en strings, el cual debe recorrer los chars contenidos dentro del string para poder compararlos versus todas y cada una de las vocales.

  1. public int counterVowelsPerLine(String line){
  2. int counter=0;
  3. char [] vowels={'a','e','i','o','u','A','E','I','O','U'};//vocales a usar en la comparacion
  4. char [] charsLine=line.toCharArray();
  5. for(int i=0;i<charsLine.length;i++){
  6. for(int j=0;j<vowels.length;j++){
  7. if(charsLine[i]==vowels[j]){//comparacion
  8. counter++;
  9. }
  10. }
  11. }
  12. return counter;
  13. }

Lo que nos falta es solo crear una función Java que recorra las lineas de texto y proceda al conteo.

  1. public int countVowels(String filename) {
  2. int counter = 0;
  3. try{
  4. setFilename(filename);
  5. openFile();//abrir archivo
  6. readFile();//leer datos
  7. }catch(Exception ex){}
  8.  
  9. for(String charline:lines){
  10. counter+=counterVowelsPerLine(charline);//aplicamos conteo a cada una de las lineas leidas
  11. }
  12. return counter;
  13. }

El modo de probar nuestro código Java es el siguiente:

  1. ContarVocalesFichero contador=new ContarVocalesFichero();
  2. int counter=contador.countVowels("holamundo.txt");
  3. System.out.println("El fichero tiene "+counter+" vocales");

Espero que os haya servido el ejemplo para contar las vocales de un fichero en Java.

Vídeos sobre Java


2 comentarios en “Contar las vocales de un fichero en Java”

xhrist14n

xhrist14n

ya mira supongo que no estas familiarizado con las versiones de java, hay desde la version 1.4 en adelante este codigo funciona sobre la version 1.7 en adelante por tanto que debo suponer que tu version de java esta muy por detras de esa version ..

el for con los : itera toda estructura de datos o arreglo de datos iterable sin necesidad de usar un iterador y solo funciona en versiones superiores de java, las antiguas no lo soportan…

xhrist14n

BoreAaron

Mi duda es sobre la penúltima parte donde pones:
for(String charline:lines){

cuando pongo los “:” me marca un error que no he encontrado como resolver.

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*