当前位置:  开发笔记 > 编程语言 > 正文

在子字符串后查找索引

如何解决《在子字符串后查找索引》经验,为你挑选了1个好方法。

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

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

我正在寻找一种在寻找子字符串找到索引或子字符串的方法.

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

int index = haystack.IndexOf(needle);

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

正如在这个类似的问题(以及可能的其他问题)中所回答的那样,如果你想立即找到后面的字符needle,则需要index按照针的长度递增,如下所示:

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

是否存在一种方法(现有的,或者可能很容易扩展),除了index + needle.Length每次允许您确定子字符串的结束索引时都要键入



1> CodeCaster..:

不,BCL没有内置任何东西.

通过扩展方法添加自己是微不足道的:

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,而不是之后的字符索引.

您还可能希望使用int startIndex参数添加重载,并实际使用a从上面的方法中调用该参数startIndex: 0.

并确保将错误处理添加到扩展方法,如抛出ArgumentNullException等等.

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


只是为其他读者链接[这个关于扩展方法的MSDN页面](https://msdn.microsoft.com/en-us/library/bb383977.aspx),@ levelonehuman和我自己的缘故,因为我对实施不是很有经验他.
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有