在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