2013-04-26 54 views
0

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

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

但是它返回-1。

回答

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] 
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/vwOERDfor演示

+0

@djs我一直希望Linq声明或API(不知道),而不是循环播放。谢谢。 – NoBullMan 2013-04-26 20:35:58

+0

@NoBullMan你的问题被标记为C#2.0,所以我不认为Linq是一个选项。 – djs 2013-04-29 15:01:37

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); 
0

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