首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取字符串中第n次出现的字符的索引

获取字符串中第n次出现的字符的索引
EN

Stack Overflow用户
提问于 2012-07-06 21:26:03
回答 9查看 38K关注 0票数 17

我正在尝试创建一个函数,该函数返回字符串中给定字符第N次出现的索引。

这是我的尝试:

private int IndexOfNth(string str, char c, int n)
{
    int index = str.IndexOf(c) + 1;
    if (index >= 0)
    {
        string temp = str.Substring(index, str.Length - index);
        for (int j = 1; j < n; j++)
        {
            index = temp.IndexOf(c) + 1;
            if (index < 0)
            {
                return -1;
            }
            temp = temp.Substring(index, temp.Length - index);
        }
        index = index + (str.Length);
    }
    return index;
}

这应该找到第一个匹配项,去掉字符串的前面部分,从新的子字符串中找到第一个匹配项,然后继续下去,直到得到第n个匹配项的索引。然而,我没有考虑到最后一个子串的索引将如何从原始字符串中的原始实际索引偏移。我该怎么做呢?

另外,作为一个次要问题,如果我想让char作为制表符,我应该传递这个函数'\t‘还是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-07-06 21:33:56

使用LINQ查找字符串aababaababa中的第5个a的索引

var str = "aababaababa";
var ch = 'a';
var n = 5;
var result = str
  .Select((c, i) => new { c, i })
  .Where(x => x.c == ch)
  .Skip(n - 1)
  .FirstOrDefault();
return result != null ? result.i : -1;
票数 14
EN

Stack Overflow用户

发布于 2012-07-06 21:29:27

不要这样做;IndexOf接受第二个参数,该参数指定从哪里开始。

private static int IndexOfNth(string str, char c, int n) {
    int s = -1;

    for (int i = 0; i < n; i++) {
        s = str.IndexOf(c, s + 1);

        if (s == -1) break;
    }

    return s;
}
票数 43
EN

Stack Overflow用户

发布于 2012-07-06 21:29:04

在我看来,获取所有这些子字符串是非常浪费的。为什么不直接循环你自己呢?

private int IndexOfNth(string str, char c, int n)
{
    int remaining = n;
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i] == c)
        {
            remaining--;
            if (remaining == 0)
            {
                return i;
            }
        }
    }
    return -1;
}

(我考虑过在一个循环中使用IndexOf,就像minitech的解决方案一样,但我觉得这样做有点麻烦。当然,这两个都很好。两者基本上做相同的工作,只检查每个字符一次。使用IndexOf可能会稍微高效一些,但请选择您认为更具可读性的方法。)

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

https://stackoverflow.com/questions/11363083

复制
相关文章

相似问题

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