如何在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表达式来获取包含子字符串的每个元素。