- #1
M
Michael_B
Bekanntes Mitglied
Themenersteller
- Dabei seit
- 21.09.2002
- Beiträge
- 860
- Reaktionspunkte
- 0
- Ort
- Köln
Hallo,
hier ist der nervende Java-Coder wieder Mir ist folgendes aufgefallen:
Ich lese aus einer Datei eine Zeile aus, die Zahlen enthält. Diese Zahlen sind TAB-delimited. Es kann auch vorkommen, dass in einer Spalte kein Wert existiert. Ich speichere die Zahlen als Double-Objekte in einer ArrayList. Solche - ich nenn sie mal - NULL-Werte kann ich daher auch in der ArrayList (als null) speichern.
Aber ich rede wieder zuviel, es geht hier nämlich nicht um die Zahlen, sondern generell um das Einlesen. Ich hole mir also eine Zeile aus der Datei und mache mir davon erstmal ein String[]
Ich muss jedoch auch sicherstellen, dass eine gewisse Konsistenz gegeben ist. Soll heissen, dass jede Zeile die gleiche Anzahl an Werten haben soll. Das prüfe ich, indem ich die erste Zeile als Grundlage nehme, diese split'te und mir die Anzahl an Werten merke. In jeder Folgezeile überprüfe ich dann, ob die Anzahl der Werte dieser Zeile mit dem gemerkten Wert übereinstimmt.
Allerdings ist das problematisch, wenn in der letzten Spalte kein Wert steht (obwohl dort immernoch ein \t anzutreffen ist. Habe dazu mal ein kleines Programm geschrieben, das das Problem verdeutlichen soll.
gibt folgenden Output:
Ich hätte aber gerne, dass arr1 genauso lang ist wie arr2 und halt eben die Werte von index 4 bis 9 leere Strings sind... wie kann ich das Pattern für die split-Methode anpassen, dass mir die Methode alle Elemente (also auch die hinterletzten Leerstrings) liefert?
Lg und THX in advance
M.
hier ist der nervende Java-Coder wieder Mir ist folgendes aufgefallen:
Ich lese aus einer Datei eine Zeile aus, die Zahlen enthält. Diese Zahlen sind TAB-delimited. Es kann auch vorkommen, dass in einer Spalte kein Wert existiert. Ich speichere die Zahlen als Double-Objekte in einer ArrayList. Solche - ich nenn sie mal - NULL-Werte kann ich daher auch in der ArrayList (als null) speichern.
Aber ich rede wieder zuviel, es geht hier nämlich nicht um die Zahlen, sondern generell um das Einlesen. Ich hole mir also eine Zeile aus der Datei und mache mir davon erstmal ein String[]
Code:
String[] values = zeile.split(\t)
Allerdings ist das problematisch, wenn in der letzten Spalte kein Wert steht (obwohl dort immernoch ein \t anzutreffen ist. Habe dazu mal ein kleines Programm geschrieben, das das Problem verdeutlichen soll.
Code:
public class Test {
public static void main(String[] args) {
String zeile1 = a\tb\tc\td\t\t\t\t\t\t;
String zeile2 = zeile1+f;
String[] arr1 = zeile1.split(\t);
String[] arr2 = zeile2.split(\t);
System.out.println(# of elements in arr1: +arr1.length);
for(int i=0; i<arr1.length; i++) {
System.out.println([+i+] +arr1[i]);
}
System.out.println(\n# of elements in arr2: +arr2.length);
for(int i=0; i<arr2.length; i++) {
System.out.println([+i+] +arr2[i]);
}
}
}
Code:
# of elements in arr1: 4
[0] a
[1] b
[2] c
[3] d
# of elements in arr2: 10
[0] a
[1] b
[2] c
[3] d
[4]
[5]
[6]
[7]
[8]
[9] f
Lg und THX in advance
M.