无法在String拆分中获取正则表达式示例

时间:2012-02-16 07:12:54

标签: java regex string

我无法从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“”而在位置34中有2“”? 其余的相同。

任何帮助?

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-""-obo-""-o)之间的分裂,以及最后一次之后的分裂 - 直到字符串结尾 - 再次 - 空旷的。

所以我们总共有5个匹配的字符串,分裂可以返回。

如果我们使用5分割 - 我们返回最多5个子串,这正是我们所拥有的5个子串,导致第一个输出:

  

如果限制n大于零,则将应用模式   最多n - 1次,数组的长度不会大于n,并且   数组的最后一个条目将包含除最后一个匹配之外的所有输入   定界符

如果我们使用-2分割,我们尽可能多地返回[在这种情况下与5相同]:

  

如果n是非正数,那么模式将被应用多次   可能,数组可以有任何长度

如果我们使用0进行拆分,我们会尽可能多地返回 - 但我们会丢弃尾随的空字符串:

  

如果n为零,那么模式将被应用多次   可能,数组可以有任何长度,并且尾随空字符串   将被丢弃

注意:如果要忽略o出现之间的空字符串,则应使用正则表达式"o+"进行拆分 - 这需要尽可能多o尽可能的,从而导致o之间没有空字符串