首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查找字符串中第n次出现的字符?

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

Stack Overflow用户
提问于 2010-10-20 17:57:55
回答 20查看 199.4K关注 0票数 106

类似于here上发布的一个问题,我正在寻找Java的解决方案。

也就是说,如何从字符串中找到第n次出现的字符串的索引?

示例:"/folder1/folder2/folder3/".在本例中,如果我请求第三次出现斜杠(/),它会出现在folder3之前,并且我希望返回这个索引位置。我的实际意图是从第n个出现的字符中子串它。

Java API中有没有什么方便易用的方法,或者我们需要自己写一个小逻辑来解决这个问题?

另外,

  1. 我迅速搜索了Apache Commons Lang的StringUtils中是否支持任何用于此目的的方法,但我没有找到任何方法。
  2. 正则表达式在这方面能提供帮助吗?
EN

回答 20

Stack Overflow用户

发布于 2010-10-20 18:02:43

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

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

这篇文章已经被重写为一篇文章here

票数 137
EN

Stack Overflow用户

发布于 2012-08-01 04:55:29

我认为查找字符串第N次出现的最简单的解决方案是使用Apache Commons中的StringUtils.ordinalIndexOf()

示例:

代码语言:javascript
复制
StringUtils.ordinalIndexOf("aabaabaa", "b", 2)  == 5
票数 64
EN

Stack Overflow用户

发布于 2010-10-20 18:01:00

出现两个简单的选项:

  • Use charAt() repeatedly
  • Use indexOf() repeatedly

例如:

代码语言:javascript
复制
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那么好,但可能更简单。

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

https://stackoverflow.com/questions/3976616

复制
相关文章

相似问题

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