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

如何在 C# 中查找字符串中子字符串的所有出现位置?

Susan Sarandon
发布: 2024-12-30 01:59:08
原创
363 人浏览过

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

在 C# 中查找较大字符串中子字符串的所有位置

问题:

给定一个大字符串,您需要识别并存储指定子字符串所有出现的位置在该字符串内。例如,如果子字符串是“extract”(me,i-have much.of]punctuation”出现在较大字符串的开头和中间,则应找到两个实例并将它们的索引位置添加到列表中,从而产生包含 0 和中间出现的索引的列表。

解决方案:

提供的代码利用 IndexOf 方法,该方法可以用于定位字符串中第一次出现的子字符串,但是,此方法仅返回第一个匹配项,可以使用循环从上一个匹配项之后的位置开始重复调用 IndexOf,直到不再有匹配项。然后可以将索引位置添加到所需的列表中。

这是所提供的更正版本代码:

List<int> inst = new List<int>();
int index = 0;
while (index < source.Length)
{
    int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index);
    if (src == -1)
        break;  // No more occurrences found
    inst.Add(src);
    index = src + 40; // Advance the search index to beyond the current match
}
登录后复制

替代方法:

另一种解决方案涉及使用扩展方法以提供更大的便利,这是一个利用迭代器模式的示例扩展方法:

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;
    }
}
登录后复制

使用此扩展方法,您可以轻松找到子字符串的所有出现位置:如下:

List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
登录后复制

以上是如何在 C# 中查找字符串中子字符串的所有出现位置?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板