我试图在一个字符串数组中找到一个以特定子字符串开始的字符串。保证数组中的一个字符串以特定子字符串开头。
我试图使用:
int index = Array.BinarySearch (lines, "^"+subString);
其中lines是字符串数组,我正在寻找使用subString 启动的数组的索引。但是,我要么使用正则表达式不正确,要么有更好的方法来解决这个问题?
答案 0 :(得分:2)
您是否需要找到(第一个)出现的索引,或者您是否需要找到与该标准匹配的实际字符串?
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,手动计数器增量器和中断语句来完成。如果我正在寻找索引,我更喜欢使用数组。
答案 1 :(得分:2)
BinarySearch
只能用于查找完整的字符串,因此您不能将其用于子字符串匹配。您还必须确保首先对数组进行排序以使用BinarySearch
。
您可以使用Array.FindIndex
:
int index = Array.FindIndex(lines, line => line.TrimStart().StartsWith(subString));
答案 2 :(得分:0)
然而,另一种解决方案:
int index = lines.ToList().FindIndex(line => line.TrimStart().StartsWith(subString));