我有一个字符串;
String uA = "Mozilla/5.0 (iPad; CPU OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 Twitter for iPhone";
String[] a= {"iphone","ipad","ipod"};
必须返回ipad
,因为ipad位于字符串的第一个匹配ipad中。
在其他情况下
String uA = "Mozilla/5.0 (iPhone/iPad; CPU OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508";
相同的字符串数组首先匹配iPhone
。
答案 0 :(得分:10)
所以你想要在目标字符串中最早出现的数组中的单词?这听起来像你可能想要的东西:
return array.Select(word => new { word, index = target.IndexOf(word) })
.Where(pair => pair.index != -1)
.OrderBy(pair => pair.index)
.Select(pair => pair.word)
.FirstOrDefault();
详细步骤:
string.IndexOf
如果找不到则返回-1)null
答案 1 :(得分:1)
试试这个:
String uA = "Mozilla/5.0 (iPad; CPU OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 Twitter for iPhone";
String[] a = { "iphone", "ipad", "ipod" };
var result = a.Select(i => new { item = i, index = uA.IndexOf(i) })
.Where(i=>i.index >= 0)
.OrderBy(i=>i.index)
.First()
.item;
答案 2 :(得分:1)
这是一个无linq方法,
static string GetFirstMatch(String uA, String[] a)
{
int startMatchIndex = -1;
string firstMatch = "";
foreach (string s in a)
{
int index = uA.ToLower().IndexOf(s.ToLower());
if (index == -1)
continue;
else if (startMatchIndex == -1)
{
startMatchIndex = index;
firstMatch = s;
}
else if (startMatchIndex > index)
{
startMatchIndex = index;
firstMatch = s;
}
}
return firstMatch;
}