Wie zu erkennen, end-of-line-Scanner von text-Datei
So bin ich beim Lesen ein input-text-Datei, die 4 Zeilen der single-Leerzeichen getrennte zahlen. Die text-Datei ist nur:
5
9 6
4 6 8
0 7 1 5
Ich möchte zu Eingang diese zahlen in ein 2D-array genannt Zeilen. So zum Beispiel rows[1][0]
sollte 9
ist die erste Zahl in der zweiten Zeile.
Mein problem ist, wenn ich mit dem Scanner für in.next()
oder in.nextInt()
ignoriert Sie das Ende der Linie und hält nur auf geht, so rows[0][1]
endet als 9
statt 0
. Ich möchte für das array zu beenden Auffüllen mit 0
's, wenn es keine Zahl für diesen slot. So, da die erste Zeile ist nur 1
Nummer 5
möchte ich für die array - rows[0][0]
zu 5
, aber rows[0][1]
zu rows[0][3]
zu 0
.
Habe ich versucht, mit einer try/catch für NoSuchElementException
und wenn in.hasNextLine()
aber keiner von denen schien zu funktionieren.
Irgendwelche Ideen oder Hilfe würde sehr geschätzt werden.
- Herzlich willkommen auf Stackoverflow. Können Sie bitte veröffentlichen Sie Ihren code? Wir werden glücklich sein, Ihnen zu helfen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mit einem Scanner zum Lesen von einzelnen Token, und Sie können einen Scanner zum Lesen einer ganzen Zeile, aber Sie können nicht mit einem Scanner, beides zu tun.
Was Sie tun möchten, Lesen Sie zunächst die Zeile in einen String, dann verwenden Sie einen Scanner auf diesen String zu analysieren, die Zeile, z.B.:
Können Sie auch mit einem Scanner zum Lesen von Zeilen anstelle von einem BufferedReader, aber es sei denn, Sie haben eine bestimmte Anforderung (z.B. Sie versuchen, diese drop in den code, nutzt bereits ein Scanner), ist es eigentlich egal, wie Sie Lesen die Zeilen.
Hoffe, das hilft.
Verwenden Sie mehr als einen Scanner. Ein Scanner wird jede Zeile mit
nextLine()
, und dann füttern Sie die Zeile erhalten auf den nächsten Scanner analysiert jedes line-Token. Nur sicher sein, zu schließen() des inneren Scanner (und die äußeren auch) wenn Sie fertig sind es zu benutzen.Pseudocode:
close()
ist die richtige Methode aufrufen. Danke!Sollten Sie wahrscheinlich verwenden einen
BufferedReader
undsplit
. Der Vorteil dieser ist, dass Sie wissen, wie groß machen Sie Ihr array in der zweiten dimension als diesplit
Methode wird ein array zurückgeben, und Sie können überprüfen, Ihrelength
:Ausgabe:
Als arrays nicht erweitern, es ist nicht leicht, Sie zu verwenden, in
while
Schleifen, dass Sie nicht wissen, die Größe. Mitsplit
können Sie einfach tunfinal int[] parsed = new int[tokens.length];
mitScanner
über Leerzeichen, die Sie nicht tun konnte.Die erste dimension, die Größe ist hart codiert, aber wie gesagt, deine Datei hat immer 4 Zeilen.
List.toArray()
auch, aber das scheint mir ein wenig verschwenderisch - kopieren Daten hin und her zwischenList
s und arrays.