在研究split (String, int)的API文档后,真的对这两种方法感到困惑, 还不确定什么时候会出现空的空间。
例如
String s="boo:and:foo"
s.split("o", -2);
//the result, according to doc is { "b", "", ":and:f", "", "" }
//why there is only one "" string in the front, while two "" in the back?
我经过一些测试后的想法是,只要有连续的比赛,在这种情况下,就会有一个额外的"" ,对于最后的尾随"" 这是因为在String +连续匹配结束之前的匹配,导致两个(在字符串开始之前的匹配也将导致前导"")
需要一些确认。
答案 0 :(得分:2)
首先,让我们从检查正常拆分操作的逻辑结果开始。让我们以one:two:three:four
为例。如果你要按:
分割,你可以期望获得以下结果。
one
two
three
four
让我们在String
的末尾添加其他分隔符。现在它看起来像one:two:three:four:
。如果我们现在分裂,我们会得到相同的结果。这是由split(String)
方法定义造成的,这会留下尾随空字符串。如果要在字符串one:two:three:four::::
的末尾添加更多分隔符,也会发生同样的情况。使用split(String)
的结果将再次相同,因为与上一个示例中一样,它将排除尾随空字符串元素。
如果您想要包含这些元素,那么您可以使用split(String,int)
函数,如果您提供否定int
,则该函数将包含空尾随字符串。来自参数limit
的方法文档,即int
。
如果n是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多的次数,该数组可以具有任何长度,并且将丢弃尾随的空字符串。
通过将其作为否定传递,对于字符串one:two:three:four::
,我们将获得以下结果:
one
two
three
four
""
""
现在你也可以这样做。
它确实注意到,单词foo
将在数组的末尾创建两个空的尾随String元素,并将包含它们。