2016-08-24 103 views
0

public String\[\] split(String regex)Java字符串分割功能

Java文檔,我們可以找到例子:

字符串"boo:and:foo",例如,產生這些表情

結果如下正則表達式                   結果

Ø                                    { "b", "", ":and:f" }

什麼是第二個結果""從何而來?從boooo:and:f

+0

這返回兩個字符串,'b',':和:f',但爲什麼找不到原點'?如果使用split(「o +」,-1),那麼三個字符串返回,'b',':和:f'和'',我知道'+'意味着'o'必須至少出現一次 – user1169587

+0

@DavidPérezCabrera,不知道發生了什麼......爲什麼最後的''被計算在內,但'o''o'之間的''不計算在內? – user1169587

回答

4

當您使用分隔符o並且eachother旁邊有兩個分隔符時,它會生成一個空字符串。因此,舉例來說,如果您有一個字符串foo::bar並將其與:分開,您將得到{"foo", "", "bar"},因爲::之間的空間在分割時被視爲空字符串。

如果你想分割沒有任何空字符串,看看this question

結束空字符串?

分割時給出零或沒有限制的說法則丟棄尾部空字段

編號:Java: String split(): I want it to include the empty strings at the end

+1

那麼最後的oo呢? 。最後沒有空字符串標記。 –

+2

@omkarsirra是的,在最後的空字符串脫落(看看這個一些深入的討論關於它http://stackoverflow.com/questions/13939675/java-string-split-i-want-it-對包括最空的字符串,在最末尾 – px06

1

注意,對於一個正則表達式引擎,人物之間的位置也算。所以,正則表達式引擎看到boo:and:foo字符串作爲

<EMPTY>b<EMPTY>o<EMPTY>o<EMPTY>:<EMPTY>a<EMPTY>n<EMPTY>d<EMPTY>:<EMPTY>f<EMPTY>o<EMPTY>o<EMPTY> 
       ^between^              ^between^ 

由於第一^between^不是在字符串的結尾,split保持在結果的空位置(串)。後面的空元素作爲結尾被刪除,因爲int limit參數默認爲0。如果您通過-1(非正值),則所有結尾的空元素將出現在結果數組中。請參閱String#split參考。