我有一個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
的元素,然後返回搜索字符串到這一點。
例如:
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可以做到這樣嗎?
您的意思是「我想要做的是找到subStringList的元素,它在給定的搜索字符串中出現FIRST,然後返回searchString到那個點」 –
是的,這是對問題的更好的描述。 –
在您當前的代碼中,由於IndexOf(ss)永遠不會返回null,因此不需要「Index!= null」。此外,如果您正在搜索的字符串沒有搜索字符串中的一個......您當前的代碼將崩潰。 – JohnG