2013-02-27 16 views
19

Ich habe das folgende Beispiel, besser zu erklären, was ich zu tun habe versucht:Java geteilt durch eine aufeinanderfolgende Zeichen

String text = "a,b,,,,c,,"; 
String[] split = text.split(","); 
for(int i=0;i<split.length;i++){ 
    System.out.println("I = "+i+" "+split[i]); 
} 

Die Ausgabe lautet:

I = 0 a 

I = 1 b 

I = 2 

I = 3 

I = 4 

I = 5 c 

Aber, was ich will, ist eine Reihe von Größe 8 zu erhalten, enthält auch:

I = 6 

I = 7 

natürlich sind die letzten 2 Elemente leere Strings sein wird, aber es ist wichtig für m um sie zu bekommen. Außerdem denke ich, dass es logisch ist, sie zu haben. Ich meine, wenn ich habe:

String text = "a,b,,,,c,,d"; 

Das Ergebnis wäre ein Array der Größe 8 und ich denke nicht, dass es ein großer Unterschied zwischen den zwei Beispielen.

Antwort

26
String[] split = text.split(",", -1); 

Dieses Verhalten sieht tatsächlich schwierig, aber es ist tatsächlich (nicht sehr gut IMHO, dass die) erklärt im official documentation.

wenn n kraft- dann wird das Muster so oft wie möglich und die Array kann

Das Problem mit text.split(",") jede Länge haben angewendet werden, ist, dass es um text.split(",", 0) äquivalent ist. Verwendung eines 0 Grenze, wie in der Dokumentation erläutert:

Wenn n Null ist, dann wird das Muster so oft wie möglich angewendet werden, kann das Array eine beliebige Länge haben, und leere Strings nachlauf werden verworfen.

Sie wollen auf keinen Fall, dass die leeren Strings verworfen werden.

+6

Wow. Ich dachte nicht, dass ich etwas Neues über solch eine grundlegende Sache wie "String # Split" lernen könnte. Ich habe mich geirrt. Sowohl die Frage als auch die Antwort waren sehr lehrreich. Das heißt, dem Benutzer * Erklärung * anzubieten würde eine gute Antwort geben und es großartig machen. –

+0

Danke, es funktioniert super! Ich habe Anwendungen für etwa 3 Jahre in Java programmiert, aber es scheint, dass es immer neue Dinge zu lernen gibt, auch wenn sie auf den ersten Blick einfach erscheinen. – Anakin001

+0

@ T.J.Crowder Ich hatte gerade dieses Problem letzte Woche und das hat funktioniert. Ich verstehe eigentlich nicht genau warum/wie das funktioniert und die Dokumentation ist nicht sehr klar darüber – m0skit0

0

Ich ziehe es (wenn Sie externe Bibliotheken verwenden können):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

Für den größten Teil der StringUtils Bibliothek nur ein bisschen effizienter als die Standard-Java-Implementierung zu sein scheint, weil ... na ja Hey, deshalb hat Apache sich die Mühe gemacht, es zu schreiben. Plus, auf den ersten Blick ist es klar, was diese Aufteilung von dem Methodennamen macht, während auf den ersten Blick ein regulärer String, der mit einer -1 Grenze geteilt wird, nicht sein könnte.

Verwandte Themen