Java .txt Datei zu Array?
Angenommen man hat ein Text-Dokument (.txt) mit folgendem Aufbau:
- Die erste Zeile besteht aus zwei Zahlen, die durch ein Leerzeichen getrennt sind
- Die darauffolgenden Zeilen (angenommen es sind immer 3 Stück) bestehen aus Buchstaben auf die zwei Leerzeichen folgen oder aus einer Kombination aus Buchstabe und Zahl, worauf nur ein Leerzeichen folgt
Hier ein Beispiel zur Veranschaulichung:
4 9
A X2 a D
J d r2 L
U K q w
Wie ist es mit möglichst wenig code und nur essenziellen Importen möglich in Java diese Datei (text1.txt) so einzulesen, dass man am Ende einen Array erhält, der alle Elemente der Text-Datei enthält, die jeweils durch ein oder zwei Leerzeichen getrennt sind. Das Ganze sollte dann für diese Beispiel so aussehen (würde man den Array einfach manuell erstellen):
String[] Array = {4, 9, A, X2, a, D, J, d, r2, L, U, K, q, w}
2 Antworten
try (var lines = Files.lines(Path.of("test.txt"))) {
String[] result = lines
.flatMap(s -> Stream.of(s.split("\\s+")))
.toArray(String[]::new);
System.out.println(Arrays.toString(result));
}
Das wäre eine universelle Grundstruktur. Beim Split kann man noch nach Bedarf die Regex verfeinern.
Wenn wir damit leben können, erst die komplette Datei einzulesen (was bei der angegebenen Größe kein Problem ist), kann man das aber noch stark vereinfachen:
String s = Files.readString(Path.of("/tmp/test.txt"));
String[] result = s.split("\\s+");
System.out.println(Arrays.toString(result));
Ziemlich einfach sogar...
Einfach am Leerzeichen trennen. Die Textdatei muss natürlich in einer Variable stehen.
let felder = txtstring.split(' ');
Beim einlesen drauf achten, das er jeden Zeilenumbruch mit einem Leerzeichen ersetzt.
Beim einlesen drauf achten, das er jeden Zeilenumbruch mit einem Leerzeichen ersetzt.
Oder einfach nur:
felder = txtstring.split('\\s');
\s steht für „A whitespace character: [ \t\n\x0B\f\r]“ (Quelle)