我有一个字符串数组,{"ABC_DEF_GHIJ", "XYZ_UVW_RST", ...}
如果我的数组包含一个部分匹配的字符串,我想搜索它"ABC_DEF"
。它应该返回索引 (0) 或字符串本身 ("ABC_DEF_GHIJ")。我试过:
int index = Array.IndexOf(saGroups, "ABC_DEF");
但它返回-1。
您可以使用扩展方法和 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() 方法。
您需要将数组转换为 a List<string>
,然后使用ForEach
扩展方法和 Lambda 表达式来获取包含子字符串的每个元素。
试试这个:
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);
只需遍历您的字符串数组并使用该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;
}
有关演示,请参见https://ideone.com/vwOERD
您还可以使用包含:
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]