我有一个大字符串需要解析,我需要找到的所有实例extract"(me,i-have lots. of]punctuation,并将每个实例的索引存储到列表中。
extract"(me,i-have lots. of]punctuation
因此,可以说这条字符串位于较大字符串的开头和中间,这两个字符串都将被找到,并且它们的索引将添加到List。并且List将包含0和其他索引,无论它是什么。
List
0
我一直在玩弄和string.IndexOf做 几乎 就是我正在寻找的,我已经写了一些代码-但它不工作,我一直无法弄清楚到底什么是错的:
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,则该名称空间将作为任何字符串上的方法出现,您可以执行以下操作:
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; } }