2010-07-13 17 views
5

Fall 1Schnur, geteilt. braucht Verständnis

String a = "   "; 
String[] b = a.split(","); 
System.out.println(b.length); 

Drucke 1. Warum helfen?

Fall 2

String a = ",,,,,,,,,,,,"; 
String[] b = a.split(","); 
System.out.println(b.length); 

Drucke 0. Warum?

Ehrlich gesagt, ich bin an einem Verlust hier

Antwort

12

Dieses Verhalten in der Dokumentation zu String.split erwähnt wird:

Diese Methode funktioniert wie von den two-argument split method mit dem angegebenen Ausdruck aufrufen und einen Grenzwert Argument von Null. Nachlaufende leere Strings sind daher im resultierenden Array nicht enthalten.

Ihr erstes Beispiel sollte ein Array geben, das eine einzelne Zeichenfolge mit Leerzeichen enthält. Eine Zeichenfolge, die Leerzeichen enthält, ist nicht leer, daher wird sie in das Ergebnis eingeschlossen.

Ihr zweites Beispiel würde ein Array geben, das viele leere Strings enthält, aber diese sind nicht in dem resultierenden Array enthalten, wie in der Dokumentation erwähnt.

Warum die Java-Designer entschieden haben, dass das Entfernen von leeren Zeichenketten, wenn limit Null ist, eine gute Idee ist - ich weiß es nicht. Die meisten anderen Programmiersprachen/Plattformen tun dies nicht. Ich halte es für ein "Gotcha" - ein Feature, das nicht so funktioniert, wie die meisten Leute erwarten.

+3

Beachten Sie, wenn Sie Sie 'a.split (",", -1) '(oder irgendwelche negativen), leere nachlaufende Komponenten werden nicht entfernt. –

+0

Der Grund ist, dass sie sich dasselbe wie Perl verhalten wollten. –

+4

All diese Seltsamkeit ist Teil des Grundes, warum Guava eine eigene Splitter-Klasse hat. –

1

Fall 1 hat ein einzelnes Element in der b-Array "" - Ihre Räume

Fall 2 leere Einträge

entfernt werden
0

In SQL Server 2005 meinen db Name: a Tabellenname: a Spaltenname: a (varchar (max)), b (int) Werte

ab

hallo | howdoudo | imfine | dank 1
h | ho | ine | ths 2 helddlo | howdddoudo | imfiddne | TDHS 3

sagen Sie mir das gespaltene gespeicherte Prozedur die Tabelle wie folgt aussieht für das heißt zu bekommen, wenn b = 1 b = 2 b = 3

Ausgang Ausgang Ausgang aaa hallo h helddlo howdoudo ho howdddoudo
imfine ine imfiddne dank ths TDHS