JAVA: String.split("\t")

  • #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 :D 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)
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.
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]);
		}
	}
}
gibt folgenden Output:
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
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.
 
  • #2
Hi... ich habs nun erstmal so umgehen können, dass ich an die zu splittende zeile erst noch um ein \tbla erweitert hab. Dieser Wert wird dann natürlich bei der späteren Verarbeitung ignoriert.
Schön find ich das allerdings nicht :(

Lg
M.
 
  • #3
Hallo,

ich habe gerade mit Google nach der Lösung zu einem Problem gesucht. Allerdings bestehen die ersten Seiten der Suchergebnisse wieder einmal hauptsächlich aus ungelösten Threads.

Als ich versucht habe in einem dieser Threads eine Lösung zu posten, war dies nicht möglich. Mir wurde Folgendes mitgeteilt:
Achtung: Das letzte Posting in diesem Thread ist bereits älter als ein Jahr.
Hier kann nicht mehr gepostet werden. Bei Problemen bitte einen neuen Thread eröffnen und ggf. auf diesen hier verweisen.

Damit habe ich ein Problem, also habe ich diesen neuen Thread hier eröffnet und verweise nun auf den alten:


Ich würde gerne eine Lösung in diesem Thread posten. Falls das aber nicht möglich ist oder nicht erwünscht ist, stelle ich hiermit einen Antrag auf die Löschung des Threads, damit er vielleicht irgendwann mal aus dem Suchindex verschwindet.

Mein Lösungsvorschlag lautet wie folgt:
Michael_B schrieb:
wie kann ich das Pattern für die split-Methode anpassen, dass mir die Methode alle Elemente (also auch die hinterletzten Leerstrings) liefert?

Das gewünschte Verhalten kann nicht durch Änderung des Patterns erreicht werden. Die Funktion split(String regex) verhält sich wie die Funktion split(String regex, int limit), wenn dieser als Parameter limit der Wert 0 übergeben wird. In diesem Fall ist die Funktion so definiert, dass leere Strings am Ende des zurückgegebenen Arrays verworfen werden.

Wenn die leeren String am Ende nicht verworfen werden sollen, verwendet man die Funktion split(String regex, int limit) und übergibt als limit eine beliebige, negative Zahl.

gruss,
Robert
 
  • #4
Um der künftigen Google-Suche Willen: Threads zusammengeführt. :froehlich1:
 
Thema:

JAVA: String.split("\t")

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.966
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben