0

我有一个字符串数组,{"ABC_DEF_GHIJ", "XYZ_UVW_RST", ...}如果我的数组包含一个部分匹配的字符串,我想搜索它"ABC_DEF"。它应该返回索引 (0) 或字符串本身 ("ABC_DEF_GHIJ")。我试过:

int index = Array.IndexOf(saGroups, "ABC_DEF");

但它返回-1。

4

4 回答 4

3

您可以使用扩展方法和 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 表达式来获取包含子字符串的每个元素。

于 2017-07-19T11:26:14.073 回答
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);
于 2013-04-26T20:47:29.747 回答
0

只需遍历您的字符串数组并使用该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

于 2013-04-26T20:12:45.307 回答
0

您还可以使用包含:

        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]
于 2013-04-26T20:30:00.323 回答