我试图在字符串数组中找到哪一个从一个特定的子字符串开始。数组中的一个字符串保证从特定的子字符串开始。在较大字符串的开始处查找字符串
我试着使用:
int index = Array.BinarySearch (lines, "^"+subString);
其中线是一个字符串数组,我期待为数组的索引开始与子字符串。然而,我要么不正确地使用正则表达式,要么有更好的方法来解决这个问题?
我试图在字符串数组中找到哪一个从一个特定的子字符串开始。数组中的一个字符串保证从特定的子字符串开始。在较大字符串的开始处查找字符串
我试着使用:
int index = Array.BinarySearch (lines, "^"+subString);
其中线是一个字符串数组,我期待为数组的索引开始与子字符串。然而,我要么不正确地使用正则表达式,要么有更好的方法来解决这个问题?
BinarySearch
只能用于查找完整的字符串,因此您不能将其用于子字符串匹配。您还必须确保阵列首先使用BinarySearch
进行排序。
您可以使用Array.FindIndex
:
int index = Array.FindIndex(lines, line => line.TrimStart().StartsWith(subString));
其他评论可能会起作用,但仍然使用阵列是最接近我目前的代码。谢谢! – user2562568
你需要找到指数(第一)occurence的,或者你需要找到实际字符串匹配绕圈呢?
myString.StartsWith(myPrefix); //returns bool
这应该做的伎俩。还是多一点冗长:
var matchedLines = lines.Where(line => line.StartsWith(substring)).ToList();
如果您需要中第一次出现的索引,我会解决这个问题作为一个数组:
var firstOccurence = String.Empty;
var firstOccurenceIndex = -1;
for(int i = 0; i < lines.Length; i++)
{
if(lines[i].StartsWith(substring))
{
firstOccurence = lines[i];
firstOccurenceIndex = i;
break;
}
}
注:您不必为使用阵列。它也可以用foreach,手动计数器递增器和break语句完成。如果我正在寻找索引,我只想使用数组。
然而,另一种解决方案:
int index = lines.ToList().FindIndex(line => line.TrimStart().StartsWith(subString));
_using正则表达式improperly_没有涉及二分查找,只需IComparable的正则表达式。 – TaW