如何在C#中搜索String数组中的子字符串

如何在String数组中搜索Substring? 我需要在字符串数组中搜索一个Substring。 字符串可以位于数组(元素)的任何部分或元素内。 (字符串的中间)我试过: Array.IndexOf(arrayStrings,searchItem)但是searchItem必须是在arrayStrings中找到的精确匹配。 在我的例子中,searchItem是arrayStrings中完整元素的一部分。

 string [] arrayStrings = { "Welcome to SanJose", "Welcome to San Fancisco","Welcome to New York", "Welcome to Orlando", "Welcome to San Martin", "This string has Welcome to San in the middle of it" }; lineVar = "Welcome to San" int index1 = Array.IndexOf(arrayStrings, lineVar, 0, arrayStrings.Length); // index1 mostly has a value of -1; string not found 

我需要检查arrayStrings中是否存在lineVar变量。 lineVar可以具有不同的长度和值。

在数组字符串中查找此子字符串的最佳方法是什么?

如果您需要的是关于lineVar是否存在于数组中的任何字符串中的bool true / false答案,请使用:

  arrayStrings.Any(s => s.Contains(lineVar)); 

如果你需要一个索引,这有点棘手,因为它可能出现在数组的多个项目中。 如果你不是在寻找布尔,你能解释一下你需要什么吗?

老套:

 int index = -1; for(int i = 0; i < arrayStrings.Length; i++){ if(arrayStrings[i].Contains(lineVar)){ index = i; break; } } 

如果您需要所有索引:

 List> indexes = new List>(); for(int i = 0; i < arrayStrings.Length; i++){ int index = arrayStrings[i].IndexOf(lineVar); if(index != -1) indexes.Add(new Tuple(i, index)); //where "i" is the index of the string, while "index" is the index of the substring } 

如果你需要包含数组元素中子字符串的第一个元素的索引,你可以这样做……

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