2014-06-25 86 views
1

我试图在字符串数组中找到哪一个从一个特定的子字符串开始。数组中的一个字符串保证从特定的子字符串开始。在较大字符串的开始处查找字符串

我试着使用:

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

其中线是一个字符串数组,我期待为数组的索引开始与子字符串。然而,我要么不正确地使用正则表达式,要么有更好的方法来解决这个问题?

+0

_using正则表达式improperly_没有涉及二分查找,只需IComparable的正则表达式。 – TaW

回答

2

BinarySearch只能用于查找完整的字符串,因此您不能将其用于子字符串匹配。您还必须确保阵列首先使用BinarySearch进行排序。

您可以使用Array.FindIndex

int index = Array.FindIndex(lines, line => line.TrimStart().StartsWith(subString)); 
+0

其他评论可能会起作用,但仍然使用阵列是最接近我目前的代码。谢谢! – user2562568

2

你需要找到指数(第一)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语句完成。如果我正在寻找索引,我只想使用数组。

0

然而,另一种解决方案:

int index = lines.ToList().FindIndex(line => line.TrimStart().StartsWith(subString)); 
相关问题