如何获取字符串中字符第n次出现的索引?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我正在尝试创建一个函数,返回字符串中给定字符的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’还是什么?

提问于
用户回答回答于

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

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;
用户回答回答于

不要那样做;

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;
}

扫码关注云+社区