在 C# 中查找较大字符串中的所有子字符串位置
处理大型字符串时,查找特定子字符串的所有实例至关重要用于解析和数据分析。本文解决了查找所有此类实例并将其索引存储在列表中的挑战。
问题陈述
您需要分析一个大字符串。在此字符串中,您需要识别并存储特定子字符串每次出现的位置。假设示例字符串是“extract”(me,i-have much.of]punctuation。”您希望在较大的字符串中找到该子字符串的所有出现位置,并将它们的索引添加到列表中。
解决方法
方法一:
可以使用C#中的IndexOf方法来定位但是,要查找所有出现的子字符串,我们需要使用循环来迭代字符串并继续搜索,直到找不到更多实例。
可以通过使用扩展来改进此技术方法使代码更加简洁,这是一个示例扩展方法:
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); } }
方法 2:
或者,迭代器可以也可用于按顺序生成索引:
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; } }
这两个方法都可以轻松添加到任何字符串对象,从而可以方便地查找所有子字符串位置,例如,以下行将查找所有出现的位置。字符串“fooStringfooBar”中的子字符串“foo”:
List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
以上是如何在 C# 中查找较大字符串中子字符串的所有出现情况?的详细内容。更多信息请关注PHP中文网其他相关文章!