6

我有这个问题,我正在使用 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++;
        }
    }
}

现在,我创建了一个字符串数组来存储多个字符串,但 Contains 方法似乎只接受一个字符串。

string[] systemsarray = new string[] { "as400", "x500", "mainframe" };

if(txt.Contains(systemsarray))
{
    systems++;
}
// error message: cannot convert from string[] to string

有谁知道如何做到这一点,或改进它的方法?

提前致谢。

4

4 回答 4

9

如果您正在寻找该行中是否存在这些单词,请尝试:

if(systemsarray.Any(word => txt.Contains(word)))
{
    users++;
}
于 2013-08-05T19:06:42.843 回答
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
于 2013-08-05T19:07:30.550 回答
5

您需要从数组中提取每个项目:

foreach (string item in systemsarray)
{
 if(txt.Contains(item))
 {
    systems++;
 }
}
于 2013-08-05T19:08:03.863 回答
2

如果你想要一个不区分大小写的搜索(as400将匹配AS400),你可以这样做

if (systemsarray.Any(x => x.Equals(txt, StringComparison.OrdinalIgnoreCase)))
{
    //systemsarray contains txt or TXT or TxT etc...
}

如果要考虑大小写(或选择不同的枚举值),可以删除StringComparison.OrdinalIgnoreCase 。

于 2013-08-05T19:39:18.460 回答