首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >split()方法是如何在java中工作的?

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

Stack Overflow用户
提问于 2017-10-08 10:58:11
回答 4查看 583关注 0票数 5

我的问题是,为什么有以下节目:

代码语言:javascript
复制
// 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);
    }
}

将字符串"geekss@for@geekss"拆分为5个子字符串:{"geek", "", "@for@geek", "", ""}。在我看来,应该有4个子串:{"geek", "","@for@geek", ""}。有人能澄清我的疑虑吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-08 11:08:53

如果你仔细看医生:

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

因此,您的结果数组包含两件事:

  • 字符串的一个子字符串,后面跟着s (斜体部分)
  • 在字符串末尾留下的内容(粗体部分)

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

请注意,您传递的limit参数5也是相关的。根据文件:

如果限制n大于零,则模式最多将被应用n-1次,数组的长度将不大于n,和数组的最后一项将包含最后匹配分隔符以外的所有输入。

因此,最后匹配的分隔符是最末尾的s。在此之后,仍然有一个空字符串尚未检查。

票数 4
EN

Stack Overflow用户

发布于 2017-10-08 11:05:52

下面是对正在发生的事情的图解:

代码语言:javascript
复制
^geek s  s @for@geek s  s  $
 geek |""| @for@geek |""|""

最后定界符和$之间的位置被计算为空字符串匹配。注意,如果您的字符串是以s开头的,那么您也会得到一个空字符串。

我们碰巧看到5个匹配的原因是因为您的拆分限制大于或等于5,但这本身并不能解释输出。

票数 2
EN

Stack Overflow用户

发布于 2017-10-08 11:04:57

Split("s", 5)查找4s字符,并返回两个序列's'之间存在的任何子字符串,即空子字符串,或从字符串开始到字符串的第一个字符,以及从字符串的最后一个到字符串的末尾。所以你有5个子子。

如果您查看@ tobias_k非常有用的注释,您有4个字符,而不是5个,拆分方法中的第二个参数(数字5 )告诉我们如果移除s有多少子字符串,对于4s有5个子字符串,如果尝试使用大于5的任何数,则得到相同的结果,因为没有其他子字符串要拆分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46630316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档