Soy nuevo en java y no puedo entender por qué mi código no se imprime a cabo tanto el archivo de texto y la letra ocurrencia

JavaLearner:

Mi código imprime sólo la primera línea del archivo y la lineaturas es 1. Sin embargo la matriz imprime la cantidad correcta de las letras. ¿Cómo puedo cambiar el código para imprimir texto y la letra ocurrencia. También quiero imprimir en la posición 27 del array de caracteres no alfabéticos, como símbolo y spaces.Thanks con antelación.

 import java.io.*;
 public class Test { 
 public static void main(String[] args)throws Exception {

     int lineCount=0; // Variale used to count the numbers of line. 
     int nextChar;
     char c;

     File file = new File("file.txt");  //  file in same folder

     BufferedReader readFile = new BufferedReader(new FileReader(file)); 
     String lines= " "; 
     int[] count = new int[27];
     char ch;

     while ((lines = readFile.readLine()) != null){

        System.out.println(lines);
        while ((nextChar = readFile.read()) != -1) {
        ch = ((char) nextChar);

            // Does this code count even uppercase or shall i  
            // convert it the text to lower case.

            if (ch >= 'a' && ch <= 'z'){
                count[ch - 'a']++;

            }
        }
        lineCount++;
    }

    System.out.println("file.txt containes " + lineCount + " lines.");

    for (int i = 0; i < 26; i++) {
        System.out.printf("%c %d", i + 'A', count[i]);
    }        
} 
} 
jste89:

Usted fue muy estrecha con su respuesta original!

El problema principal era el anidado whilebucle que estaba leyendo al final del archivo - es por eso que la primera línea se imprime y los recuentos eran correctas, pero las otras líneas no se imprimieron. La razón de que se BufferedReaderestá respaldado por una memoria intermedia (como su nombre indica). La primera llamada a readLinedevolvió una Stringque contiene todos los caracteres en el buffer hasta el primer carácter de nueva línea. Cada llamada a la readmétodo en el siguiente bucle while mueve entonces la posición de la memoria intermedia a lo largo de por un carácter hasta que se llega al final del archivo, en cuyo punto el readmétodo devuelve -1 y se sale del bucle. En el momento de la segunda llamada a readLinese hace el buffer ya se encuentra en la posición final por lo que una nullse devuelve.

Puede resolver el problema mediante la iteración sobre los bytes dentro de la línea de regresar de la llamada al método readLine.

Aquí está un ejemplo de trabajo:

public static void main(String[] args) throws Exception {
    int lineCount = 0;// Variale used to count the numbers of line.
    File file = new File("file.txt");  //  file in same folder

    BufferedReader readFile = new BufferedReader(new FileReader(file));
    String lines;
    int[] count = new int[27];
    char ch;

    while ((lines = readFile.readLine()) != null) {
        System.out.println(lines);
        for (byte charByte : lines.getBytes()) {
            ch = (char) charByte;

            // Does this code count even uppercase or shall i convert
            // it the text to lower case.

            if (ch >= 'a' && ch <= 'z') {
                count[ch - 'a']++;
            // Count non-alpha characters here. Node: this will count numeric values also...
            } else if (ch < 'A' || ch > 'Z') {
                count[26]++;
            }
        }
        lineCount++;
    }

    System.out.println("file.txt containes " + lineCount + " lines.");

    for (int i = 0; i < 26; i++) {
        System.out.printf("%c: %d\n", i + 'A', count[i]);
    }
    System.out.printf("Special characters: %d\n", count[26]);
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=218220&siteId=1
Recomendado
Clasificación