我有一個字符串數組,如{"ABC_DEF_GHIJ", "XYZ_UVW_RST", ...}
,並且想要搜索我的數組是否包含部分匹配的字符串"ABC_DEF"
。它應該返回索引(0)或字符串本身(「ABC_DEF_GHIJ」)。 我試過了:字符串數組中的部分字符串
int index = Array.IndexOf(saGroups, "ABC_DEF");
但是它返回-1。
我有一個字符串數組,如{"ABC_DEF_GHIJ", "XYZ_UVW_RST", ...}
,並且想要搜索我的數組是否包含部分匹配的字符串"ABC_DEF"
。它應該返回索引(0)或字符串本身(「ABC_DEF_GHIJ」)。 我試過了:字符串數組中的部分字符串
int index = Array.IndexOf(saGroups, "ABC_DEF");
但是它返回-1。
您還可以使用包含:
string [] arr = {"ABC_DEF_GHIJ", "XYZ_UVW_RST"};
for (int i = 0; i < arr.Length; i++)
if (arr[i].Contains("ABC_DEF"))
return i; // or return arr[i]
簡單地遍歷字符串數組,如果包含要搜索的字符串,則使用IndexOf
方法檢查每個元素。如果IndexOf
返回的值不是-1
,則在當前元素中找到該字符串,並且可以返回其索引。如果我們在數組的任何元素中找不到要搜索的字符串,則返回-1。
static int SearchPartial(string[] strings, string searchFor) {
for(int i=0; i<strings.Length; i++) {
if(strings[i].IndexOf(searchFor) != -1)
return i;
}
return -1;
}
試試這個:
string[] strArray = { "ABC_DEF_GHIJ", "XYZ_UVW_RST" };
string SearchThisString = "ABC_DEF";
int strNumber;
int i = 0;
for (strNumber = 0; strNumber < strArray.Length; strNumber++)
{
i = strArray[strNumber].IndexOf(SearchThisString);
if (i >= 0)
break;
}
Console.WriteLine("String number: {0}",strNumber);
您可以使用擴展方法和Lambda表達式來實現這一目標。
如果您需要的是包含數組元素的字符串的第一個元素的索引,你可以做到這一點...
int index = Array.FindIndex(arrayStrings, s => s.StartsWith(lineVar, StringComparison.OrdinalIgnoreCase)) // Use 'Ordinal' if you want to use the Case Checking.
如果您需要的是包含的子元素的值,只需使用數組你剛拿到指標,像這樣......
string fullString = arrayStrings[index];
注:上面的代碼會發現本場比賽的第一次出現。同理,如果你想要數組 中包含子串的最後一個元素,你可以使用Array.FindLastIndex()方法。
您需要將數組轉換成List<string>
,然後使用ForEach
擴展方法與Lambda表達式一起獲取包含字符串的每個元素。
@djs我一直希望Linq聲明或API(不知道),而不是循環播放。謝謝。 – NoBullMan 2013-04-26 20:35:58
@NoBullMan你的問題被標記爲C#2.0,所以我不認爲Linq是一個選項。 – djs 2013-04-29 15:01:37