我无法从SUN tutorial of String split获取这些示例:
E.g。 "boo:and:foo"
Regex Limit Result
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }
我无法理解结果 我读到,对于负限制,模式应用尽可能多次,对于正限制,它应用n-1次等。
但我无法理解在每种情况下如何形成结果数组。
E.g。在第一种情况下,为什么我们在位置1
中有1“”而在位置3
和4
中有2“”?
其余的相同。
任何帮助?
答案 0 :(得分:5)
案例1:
非常直接
第1步:处理 boo:和:foo
"b" and "o:and:foo"
第2步:处理 o:和:foo
"" and ":and:foo"
第3步:处理:和:foo
":and:f" and "o"
第4步:处理 o
"" and ""
案例2:它是负限制,因此它尝试尽可能多地应用模式“o”。因此与上述相同。之后,我们留下两个空字符串,不再需要拆分。
情况3:0,与情况2相同但丢弃尾随空字符串。因此它丢弃了最后两个字符串
答案 1 :(得分:3)
让我们从理解所有可能的分裂开始。我认为"b"
和":and:f"
很明确。
空字符串来自于o
之间(fo-""-o
,bo-""-o
)之间的分裂,以及最后一次之后的分裂 - 直到字符串结尾 - 再次 - 空旷的。
所以我们总共有5个匹配的字符串,分裂可以返回。
如果我们使用5分割 - 我们返回最多5个子串,这正是我们所拥有的5个子串,导致第一个输出:
如果限制n大于零,则将应用模式 最多n - 1次,数组的长度不会大于n,并且 数组的最后一个条目将包含除最后一个匹配之外的所有输入 定界符
如果我们使用-2分割,我们尽可能多地返回[在这种情况下与5相同]:
如果n是非正数,那么模式将被应用多次 可能,数组可以有任何长度
如果我们使用0进行拆分,我们会尽可能多地返回 - 但我们会丢弃尾随的空字符串:
如果n为零,那么模式将被应用多次 可能,数组可以有任何长度,并且尾随空字符串 将被丢弃
注意:如果要忽略o
出现之间的空字符串,则应使用正则表达式"o+"
进行拆分 - 这需要尽可能多o
尽可能的,从而导致o
之间没有空字符串