2010-07-13 99 views
5

案例1個字符串,拆分。需要幫助理解

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

打印1.爲什麼?

案例2

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

打印0。爲什麼呢?

老實說,我在這裏

回答

12

虧損這一現象在文件中所提及的String.split

此方法的工作方式類似於使用給定表達式和限制參數調用two-argument split method爲零。 因此尾隨的空字符串不包含在結果數組中。

你的第一個例子應該給出一個包含單個字符串的數組,其中包含空格。包含空格的字符串不是空的,因此它包含在結果中。

第二個示例將提供一個包含大量空字符串的數組,但是它們不包含在文檔中提到的結果數組中。

至於爲什麼Java設計者決定在limit爲零時刪除尾隨空字符串是個好主意 - 我不知道。大多數其他編程語言/平臺不這樣做。我認爲這是一個「陷阱」 - 一個不像大多數人期望的那樣的功能。

+3

注意,如果你使用'a.split( 「,」,-1)'(或任何否定的),空的尾隨組件不會被刪除。 – 2010-07-13 22:56:31

+0

原因是他們希望它的行爲與Perl相同。 – 2010-07-14 02:22:29

+4

所有這些古怪都是Guava擁有自己的Splitter類的原因之一。 – 2010-07-14 02:24:15

1

案例1具有B排列「」在一個單一的項目 - 您的空間

案例2個空條目被刪除

0

在SQL Server 2005 我的數據庫名稱:一個 表名:一個 列名:A(VARCHAR(MAX)),B(INT) 值

AB

招呼| howdoudo | imfine |感謝1個
H |豪| INE |部份2 helddlo | howdddoudo | imfiddne | TDHS 3

告訴我拆分存儲過程來獲取表看起來是這樣的,即,當 B = 1 B = 2 B = 3

輸出輸出輸出 AAA 你好ħhelddlo howdoudo浩howdddoudo
imfine INE imfiddne 感謝部份TDHS