2016-08-24 39 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参考。