Seltsames Verhalten von reader.readLine();



  • Hallo!

    Ich moechte die Zeilen, die von reader.readLine() eingelesen werden, in ein String-Array namens buffer[i] zwischenspeichern -- also buffer[i] = line, da ja line = reader.readLine() ist.

    Dummerweise speichert er immer die zweite Zeile in buffer[0] ab, also "1 2". Bei der siebten Zeile buffer[6] steht dann null.

    Die Datei sieht so aus (ganz oben steht 1 0 und kein '\n'. Und ganz unten steht 0 3 - das Dateiende):

    1 0
    1 2
    2 0
    0 2
    2 3
    3 2
    0 3
    

    Ist die Textdatei etwa nicht richtig formattiert? Ausserdem bekomme ich staendig Exceptions geliefert, wenn ich z.B. Methoden wie line.charAt(0), split etc.: "java.lang.NullPointerException"

    readLine() liest ja den String in einer Zeile ein ohne "line termination characters" wie line breaks etc.

    import java.io.*;
    
    public class Main {
      // TODO: define error messages.
      private static final String ERROR_PREFIX = "Error! ";
      private static final String ERROR_MESSAGE1 = "";
      private static final String ERROR_MESSAGE2 = "";
      private static final String USAGE = "";
    
      private Main() {
      }
    
      public static void main(String[] args) {
        if (args.length != 4) {
          System.out.println(USAGE);
          System.exit(1);
        }
      FileReader in = null;
      try {
        in = new FileReader(args[0]);
      } catch (FileNotFoundException e) {
        System.out.println(ERROR_PREFIX + ERROR_MESSAGE1);
        System.exit(1);
      }
    
      BufferedReader reader = new BufferedReader(in);
      // TODO: Remove test code below, if you understand your problem.
      String[] buffer = new String[7]; // For testing purposes. Should successively store 7 lines from reader.readLine()
      int i = 0; // Array index counter for the buffer array - buffer[i].
      try {
        String line = reader.readLine();
        while (line != null) {
          // TODO: process line here
          line = reader.readLine();
          buffer[i] = line;
          ++i;
          // TODO: implement algorithm:
          // How many vertices are there?
          // Increase size of matrix successively.
          // Save the entries successively, if 1 pair exists put entry 1 in matrix[4][4], if not put 0.
        }
      } catch (IOException e2) {
          System.out.println(ERROR_PREFIX + ERROR_MESSAGE2);
          System.exit(1);
        }
        System.out.println(buffer[0]); // Test output. Remove this after done understanding reader.readLine()
      }
    }
    

    Mein Zwischenziel: ich moechte jede eingelesene Zeile mit charAt(), trim(), split("\\s+") bearbeiten koennen. Nur leider bekomme ich wie beschrieben immer "Null pointer exceptions". Falls moeglich, moechte ich ohne einen Puffer, wie buffer[i], zu verwenden direkt line.charAt(), line.split("\\s+") etc. verwenden.

    PS: ich darf nur folgende Bibliotheken verwenden: java.io, und java.lang - kein java.util!

    Vielen Dank im Voraus!
    jrookie16



  • Zeile 31 liest die erste Zeile ein - und der Rest des Programms ignoriert die dann.



  • SG1 schrieb:

    Zeile 31 liest die erste Zeile ein - und der Rest des Programms ignoriert die dann.

    Wow, danke SG1 fuer die superschnelle Antwort - du uebertriffst ja die Lichtgeschwindigkeit!!
    Danke!! Es klappt jetzt!!!


Anmelden zum Antworten