java String split(String,int)

时间:2015-11-23 07:39:37

标签: java string split

在研究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 +连续匹配结束之前的匹配,导致两个(在字符串开始之前的匹配也将导致前导"")

需要一些确认。

1 个答案:

答案 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元素,并将包含它们。