我有一个List<string>
子字符串,它可能包含在较大的主字符串中,也可能不包含在其中。前任:
List<string> subStringList = new List<string>(){" at ", " @ "," near "," by "," above "};
List<string> searchStringList = new List<string>{
"GULF ISLAND POND NEAR LEWISTON, ME",
"South Branch Raritan River near High Bridge NJ",
"Susquehanna R near Browns Island at Dalmatia, PA",
"PARKS CREEK AT LYLE FIELD RD NEAR JEFFERSON, GA",
"HOMOSASSA R AT HOMOSASSA FL",
"ST. CLAIR RIVER NEAR ROBERTS LANDING, MI"
};
我想做的是找到其元素首先subStringList
出现在给定的搜索字符串中,然后返回到该点的searchString。
例如:
List<string> riverList = new List<string>();
foreach (var seachString in searchStringList)
{
string river = seachString.ToLower();
int minIndex = int.MaxValue;
foreach (var subString in subStringList.Select(r => r.ToLower()).AsEnumerable())
{
var index = river.IndexOf(subString);
if (index != null && index > -1 && index < minIndex)
minIndex = index;
}
riverList.Add(seachString.Substring(0,minIndex));
}
输出应如下所示:
[0]: "GULF ISLAND POND"
[1]: "South Branch Raritan River"
[2]: "Susquehanna R"
[3]: "PARKS CREEK"
[4]: "HOMOSASSA R"
[5]: "ST. CLAIR RIVER"
我的代码似乎可以正常工作,但是有没有更有效的方法来执行类似的操作?如何使用Linq来完成类似的操作?
这将是很好有一个过载String.IndexOfAny()
是需要String[]
的,而不是char[]
。这是我的:
searchStringList.Select(s => s.SubstringAsFarAsIndexOfAny(subStringList));
public static class stringExt
{
public static int IndexOfAny(this string s, IEnumerable<string> anyOf, StringComparison stringComparisonType=StringComparison.CurrentCultureIgnoreCase)
{
var founds= anyOf.Select(sub=> s.IndexOf(sub,stringComparisonType)).Where(i => i>=0);
return founds.Any() ? founds.Min() : -1;
}
public static string SubstringAsFarAsIndexOfAny(this string s, IEnumerable<string> anyOf, StringComparison stringComparisonType=StringComparison.CurrentCultureIgnoreCase)
{
var foundIndex= s.IndexOfAny(anyOf,stringComparisonType);
return foundIndex >=0 ? s.Substring(0, foundIndex) : s;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句