对于涉及数组的拆分方法(在java中),什么时候出现“”?

For a split method involving arrays (in java), when do "" occur?

拆分方法的签名是: public String[] 拆分(字符串正则表达式) 以下示例假定已创建测试 String s 并且已声明 String sp 数组: String s = "Hello again", sp[];

示例:

sp = s.split("a|g");

书上怎么说这个问题的答案是: "a|g" means a or g (same as [ag]), sp[0] = "Hello ", sp[1] = "" sp[2] = "", sp[3] = "in", (notice the elements of zero length)

谁能解释一下上面的例子,以及为什么 sp[1] 和 sp[2] 会有 ""。另外,当 a|g 与 [ag]

相同时,这意味着什么

假设您在字符串中使用 X 而不是 'a' 和 'g':“Hello XXXin”并且您在“X”上拆分(因为在我们的示例中 'X' 是 'a' 或 'g',即“a|g”)。里面有三个连续的X,中间没有任何东西。

H e l l o  X X X i n
H e l l o  ^ ^ ^ i n
----------- - - ----

(双倍间距有助于可视化拆分发生的位置)

因此你得到它们之间的两个空字符串。

关于您的评论,让我们看看当 X 是 'e' 或 'g'

时会发生什么
H X l l o  a X a i n
H ^ l l o  a ^ a i n
-   --------   -----

如你所见,两次出现的X之间没有空格,因为没有连续的X,所以你得到三个正确的字符串:"H"、"llo a"和"ain"。


关于你的问题是正则表达式“a|g”和“[ag]”是等价的,第一个意思是“an 'a' OR a 'g'”, second 表示“属于仅由字符 'a' 和 'g' 组成的集合的任何字符”。我希望你明白这两个陈述在逻辑上是等价的。

拆分正则表达式根据匹配的内容进行消费和拆分。在这种情况下,它会根据 "a""g".

进行拆分

这是匹配项周围带有方括号的输入,下面是与输入对齐的结果的行:

 Hello (a)(g)(a)in
"Hello ","","","in"