首页 >后端开发 >C++ >如何在 C# 中查找较大字符串中子字符串的所有出现情况?

如何在 C# 中查找较大字符串中子字符串的所有出现情况?

Barbara Streisand
Barbara Streisand原创
2024-12-28 22:52:15690浏览

How Can I Find All Occurrences of a Substring within a Larger String in C#?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn