Java, textdokument in zweidimensionalen Array speichern und ausgeben?

2 Antworten

Die Zeilentrenner müssen natürlich auch gelesen werden. Dabei kommt es natürlich auf die richtige Stelle im Code an:

for(int i=0;i<a.length;i++) {
    if (In.read()!='\n')
        Out.println("Fehler in Zeile "+(i+1)+
                    ": Zeilentrenner fehlt!");
    for(int j =0;j<a[i].length;j++) {
        a[i][j] = In.read();
        Out.print(a[i][j]);
    }
    Out.print('\n');
}
In.close();

Beachte, dass Du auch den Zeilentrenner nach der Breite und Höhe lesen musst. Deshalb habe ich das vor die innere Schleife gesetzt.

Paustestemmer 
Fragesteller
 17.01.2021, 20:59

Hey, ich verstehe nich recht, was dieser Code genau verändert.. letztendlich bestehen die newlines doch oder?

0
ralphdieter  17.01.2021, 21:24
@Paustestemmer

Mit dem zusätzlichen In.read() werden die Zeilentrenner gelesen. Damit sollte das In.read() in der inneren Schleife nur noch die „richtigen“ Zeichen einlesen.

Allerdings weiß ich nicht, welchen Typ In hat. Im Idealfall ist es ein Text-File, der plattformabhängige Zeilentrenner automatisch in ein einzelnes '\n' umwandelt. Aber wenn es nur ein Binary-File ist und die Datei im DOS- oder Mac-Format gespeichert ist, musst Du evtl. für jeden Zeilentrenner zwei Zeichen einlesen.

0

Ja, Dein Problem sind die NewLines, die Du mitliest.

Lösungsmöglichkeit:

Nutze die Funkrion readline(), so dass Du ne ganze Zeile auf einmal bekommst. Dann musst du halt die einzelnen Zeichen in dein Feld a übertragen. (btw. gib dem armen feld doch einen sprechenderen Namen)

Alternativ kannst du die Zeichen am Ende der Zeile auch "überlesen". Aber Achtung, je nach System und Textdateiformt, kommen da entweder ein "LineFeed" oder "Carriage Return" und ein "Line Feed".

Das Verwenden der readline() Funktion wäre hier ratsamer.