小编典典

在C#中查找较大字符串中子字符串的所有位置

c#

我有一个大字符串需要解析,我需要找到的所有实例extract"(me,i-have lots. of]punctuation,并将每个实例的索引存储到列表中。

因此,可以说这条字符串位于较大字符串的开头和中间,这两个字符串都将被找到,并且它们的索引将添加到List。并且List将包含0和其他索引,无论它是什么。

我一直在玩弄和string.IndexOf几乎 就是我正在寻找的,我已经写了一些代码-但它不工作,我一直无法弄清楚到底什么是错的:

List<int> inst = new List<int>();
int index = 0;
while (index < source.LastIndexOf("extract\"(me,i-have lots. of]punctuation", 0) + 39)
{
    int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index);
    inst.Add(src);
    index = src + 40;
}
  • inst =清单
  • source =大字串

还有更好的主意吗?


阅读 650

收藏
2020-05-19

共1个答案

小编典典

这是一个示例扩展方法:

public static List<int> AllIndexesOf(this string str, string value) {
    if (String.IsNullOrEmpty(value))
        throw new ArgumentException("the string to find may not be empty", "value");
    List<int> indexes = new List<int>();
    for (int index = 0;; index += value.Length) {
        index = str.IndexOf(value, index);
        if (index == -1)
            return indexes;
        indexes.Add(index);
    }
}

如果将其放入静态类并使用导入名称空间using,则该名称空间将作为任何字符串上的方法出现,您可以执行以下操作:

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");

有关扩展方法的更多信息,请访问http://msdn.microsoft.com/zh-
cn/library/bb383977.aspx

使用迭代器也相同:

public static IEnumerable<int> AllIndexesOf(this string str, string value) {
    if (String.IsNullOrEmpty(value))
        throw new ArgumentException("the string to find may not be empty", "value");
    for (int index = 0;; index += value.Length) {
        index = str.IndexOf(value, index);
        if (index == -1)
            break;
        yield return index;
    }
}
2020-05-19