我有这个问题,我正在使用StringReader从文本框中查找特定的单词,到目前为止工作得很好,但是我需要找到一种方法来检查每一行中对应字符串数组的特定单词。
以下代码有效:
string txt = txtInput.Text;
string user1 = "adam";
int users = 0;
int systems = 0;
using (StringReader reader = new StringReader(txt))
{
while ((txt = reader.ReadLine()) != null)
{
if (txt.Contains(user1))
{
users++;
}
}
}
现在,我创建了一个String Array来存储多个字符串,但Contains方法似乎只接受一个字符串。
string[] systemsarray = new string[] { "as400", "x500", "mainframe" };
if(txt.Contains(systemsarray))
{
systems++;
}
// error message: cannot convert from string[] to string
有没有人知道如何做到这一点,或者改进它的方法?
提前致谢。
答案 0 :(得分:8)
如果您要查找该行中是否存在任何这些字词,请尝试:
if(systemsarray.Any(word => txt.Contains(word)))
{
users++;
}
答案 1 :(得分:5)
为什么不给自己写一个扩展方法呢?
public static class StringExtensionMethods
{
public static bool ContainsAny(this string self, params string[] toFind)
{
bool found = false;
foreach(var criteria in toFind)
{
if (self.Contains(criteria))
{
found = true;
break;
}
};
return found;
} // eo ContainsAny
}
用法:
string[] systemsarray = new string[] { "as400", "x500", "mainframe" };
if(txt.ContainsAny(systemsarray))
{
systems++;
}
// error message: cannot convert from string[] to string
答案 2 :(得分:4)
您需要从数组中提取每个项目:
foreach (string item in systemsarray)
{
if(txt.Contains(item))
{
systems++;
}
}
答案 3 :(得分:2)
如果您想要不区分大小写的搜索(as400
将匹配AS400
),则可以执行此操作
if (systemsarray.Any(x => x.Equals(txt, StringComparison.OrdinalIgnoreCase)))
{
//systemsarray contains txt or TXT or TxT etc...
}
如果您想考虑案例(或选择其他枚举值),可以删除StringComparison.OrdinalIgnoreCase。