split()方法如何在java中工作?

Ash*_*ari 5 java string split

我的问题是为什么以下程序:

// Java program to demonstrate working of split(regex,
// limit) with high limit.
public class GFG
{
    public static void main(String args[])
    {
        String str = "geekss@for@geekss";
        String [] arrOfStr = str.split("s", 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

将字符串拆分"geekss@for@geekss"为5个子串:{"geek", "", "@for@geek", "", ""}.据我说,应该有4个子串:{"geek", "","@for@geek", ""}.有人可以澄清我的怀疑吗?

Swe*_*per 4

如果你仔细查看文档:

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

所以你得到的数组包含两件事:

  • 字符串的子字符串,后跟s(斜体部分)
  • 字符串末尾剩下的任何内容(粗体部分)

{"geek", "", "@for@geek", ""}您获得前四个元素的原因是因为它们后面跟着s。最后""得到的就是匹配每个之后剩下的s

请注意,您通过limit的论点5也是相关的。根据文档:

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

所以最后一个匹配的分隔符是s最后的。之后仍然有一个空字符串尚未检查。