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!!!