在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 =大字串

还有更好的主意吗?

回答:

这是一个示例扩展方法:

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;

}

}

以上是 在C#中查找较大字符串中子字符串的所有位置 的全部内容, 来源链接: utcz.com/qa/420226.html

回到顶部