在较大字符串的开头查找字符串

时间:2014-06-25 07:24:42

标签: c#

我试图在一个字符串数组中找到一个以特定子字符串开始的字符串。保证数组中的一个字符串以特定子字符串开头。

我试图使用:

int index = Array.BinarySearch (lines, "^"+subString);

其中lines是字符串数组,我正在寻找使用subString 启动的数组的索引。但是,我要么使用正则表达式不正确,要么有更好的方法来解决这个问题?

3 个答案:

答案 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));