2014-06-25 131 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)); 
相關問題