首页 > 解决方案 > 当两个相等的字符相邻时,如何解释 Java 中字符串的 split()

问题描述

文档String.split

以下是示例。最后一个例子怎么解释?

例如,字符串“boo:and:foo”使用这些参数产生以下结果:

Regex Limit Result
:     2     { "boo", "and:foo" }
:     5     { "boo", "and", "foo" }
:     -2    { "boo", "and", "foo" }
o     5     { "b", "", ":and:f", "", "" }
o     -2    { "b", "", ":and:f", "", "" }
o     0     { "b", "", ":and:f" }

标签: javastringsplit

解决方案


仔细阅读文档:

此方法返回的数组包含此字符串的每个子字符串,这些子字符串由与给定表达式匹配的另一个子字符串终止或以字符串结尾终止。

请注意,空字符串是任何字符串的子字符串,包括boo:and:foo. 如果你这样做"boo:and:foo".substring(2, 2),你会得到空字符串。前两个 o 之间的空字符串后跟(即“终止于”)子字符串“o”(第二个 o)。子字符串“o”匹配正则表达式“o”,因此空字符串满足要求:

由与给定表达式匹配的另一个子字符串终止或由字符串末尾终止

所以它被放入结果数组中。

倒数第二个 o 之后的空字符串也满足这个条件,并且最后一个 o 之后的空字符串“以字符串的结尾终止”。它们应该已经添加到数组中,并且数组看起来像:

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

但是,它们会从数组中被丢弃,因为,

如果 [limit] 为零,则该模式将被应用尽可能多的次数,数组可以具有任意长度,并且尾随的空字符串将被丢弃。

“尾随空字符串”指的""是数组中的最后两个元素,它们被丢弃。


推荐阅读