我試圖在字符串數組中找到哪一個從一個特定的子字符串開始。數組中的一個字符串保證從特定的子字符串開始。在較大字符串的開始處查找字符串
我試着使用:
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