假设您有一个字符串(“ 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
每次键入以外,是否还有一种方法(现有的,或者可能易于扩展),可以确定子字符串的结尾索引?
不,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
。
并确保将错误处理添加到扩展方法中,例如抛出anArgumentNullException
等。
另外,如果要找到的字符串位于源字符串的末尾,则您不能使用此方法返回的值获取源字符串的子字符串,因为它将位于源字符串之外。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句