繁体   English   中英

C#StringReader类

[英]C# StringReader Class

我有这个问题,我使用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[] systemsarray = new string[] { "as400", "x500", "mainframe" };

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

有谁知道如何做到这一点,或有什么方法可以改善它?

提前致谢。

如果要查找该行中任何这些单词的存在,请尝试:

if(systemsarray.Any(word => txt.Contains(word)))
{
    users++;
}

为什么不给自己写一个扩展方法来做到这一点呢?

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

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

foreach (string item in systemsarray)
{
 if(txt.Contains(item))
 {
    systems++;
 }
}

如果要进行不区分大小写的搜索( as400将匹配AS400 ),则可以执行此操作

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

如果要考虑大小写(或选择其他枚举值),则可以删除StringComparison.OrdinalIgnoreCase

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM