为了账号安全,请及时绑定邮箱和手机立即绑定

如何查找字符串中字符的第n个出现?

如何查找字符串中字符的第n个出现?

MYYA 2019-10-17 14:21:30
与此处发布的问题类似,我正在寻找Java解决方案。也就是说,如何从字符串中找到第n个出现的字符/字符串的索引?例如: “ / folder1 / folder2 / folder3 / ”。在这种情况下,如果我要求第三次出现斜杠(/),它会出现在folder3之前,并且我希望返回该索引位置。我的实际意图是从字符的第n次出现开始对它进行子串化。Java API中是否有任何方便/易于使用的方法,还是我们需要自己编写一个小的逻辑来解决这个问题?也,我迅速在Apache Commons Lang的StringUtils中搜索是否为此目的支持任何方法,但没有找到任何方法。正则表达式可以在这方面有所帮助吗?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如果您的项目已经依赖于Apache Commons StringUtils.ordinalIndexOf,则可以使用,否则,这里是一个实现:


public static int ordinalIndexOf(String str, String substr, int n) {

    int pos = str.indexOf(substr);

    while (--n > 0 && pos != -1)

        pos = str.indexOf(substr, pos + 1);

    return pos;

}


查看完整回答
反对 回复 2019-10-17
?
守着一只汪

TA贡献1872条经验 获得超3个赞

我认为查找字符串的第N个最简单的解决方案是使用来自Apache Commons的StringUtils.ordinalIndexOf()。


例:


StringUtils.ordinalIndexOf("aabaabaa", "b", 2)  == 5


查看完整回答
反对 回复 2019-10-17
?
慕容708150

TA贡献1831条经验 获得超4个赞

发生两个简单的选择:


charAt()反复使用

indexOf()反复使用

例如:


public static int nthIndexOf(String text, char needle, int n)

{

    for (int i = 0; i < text.length(); i++)

    {

        if (text.charAt(i) == needle)

        {

            n--;

            if (n == 0)

            {

                return i;

            }

        }

    }

    return -1;

}

这可能不如indexOf重复使用好,但正确起来可能更简单。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 968 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信