c# - 查找子字符串后的索引

标签 c# string substring

假设您有一个字符串(“haystack”)和一个您要搜索的子字符串(“needle”):

 string haystack = "D0B11234 AM21ANP AM23AN1";
 string needle = "AM21AN";   

我正在寻找一种方法来查找正在查找的子字符串之后的索引或子字符串。

调用 IndexOf()返回针的开始位置,在这种情况下index = 9:

int index = haystack.IndexOf(needle);

我最初的想法是使用 LastIndexOf() ,但这会返回大海捞针的最后一次出现的起始索引

this similar question 中的回答(可能还有其他人),如果你想定位紧跟在 needle 之后的字符,则需要将 index 增加 needle 的长度,如下所示:

int index = haystack.IndexOf(needle);
int indexAfterNeedle = index + needle.Length;

除了每次键入 index + needle.Length 之外,是否有一种方法(现有的,或者可能易于扩展) 允许您确定 结尾 子字符串的索引?

最佳答案

不,BCL 中没有内置任何内容。

通过 extension method 添加自己很简单:

public static int EndIndexOf(this string source, string value)
{
    int index = source.IndexOf(value);
    if (index >= 0)
    {
        index += value.Length;
    }

    return index;
}

演示:

string testString = "D0B11234 AM21ANP AM23AN1";
string stringToSearch = "AM21AN";   

int endIndex = testString.EndIndexOf(stringToSearch);

Console.WriteLine(testString);
Console.WriteLine(endIndex);
Console.WriteLine(testString.Substring(endIndex));

输出:

D0B11234 AM21ANP AM23AN1
15
P AM23AN1

根据您的要求,这可能看起来像是一个错误,因此您可能希望将其更改为 index += value.Length - 1 以返回最后一个字符的位置value,而不是之后字符的索引。

您可能还想 add an overload with an int startIndex parameter ,并实际从上面的方法中使用 startIndex: 0 调用它。

并确保向扩展方法添加错误处理,例如抛出 ArgumentNullException 等。

此外,如果要查找的字符串位于源字符串的末尾,则不能使用此方法返回的值来获取源字符串的子字符串,因为它位于源字符串之外。

关于c# - 查找子字符串后的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320376/

相关文章:

c# - 取消引用可能的空引用 C#

C# 控制台应用程序 : Catching Some Cases of White Spaces

javascript - 获取像 php 中那样的日期格式?

python - 从字符串列表创建新的子字符串列表

c# - 如何使用 Unity.AspNet.WebApi 解析 global.asax 中的类型

c# - 你能在 C# 中获取堆栈上的变量列表吗?

Python YAML 转储指针引用

mysql - 在语句中使用 DISTINCT、COUNT 和 SUBSTRING

c++ - 用另一个字符串替换一个字符串的一部分

c# - Entity Framework 使用 newsequentialid() 作为 Guid Key