【问题标题】:Check string for an array item and match it检查字符串中的数组项并匹配它
【发布时间】:2012-12-09 06:01:30
【问题描述】:

我有一个字符串和一个数组,我想检查字符串并查找该字符串是否包含数组中的任何字符串。

我的数组最多包含大约 10 个元素。

string[] stringArray = { "apple", "banana", "orange" };
string text="I want an apple";

public static string getItem(string text)
{
    //check text for stringArray items
    //return item (apple, banana, orange)
}
string item = getItem(text);

所以我正在寻找的是创建一个返回项目的方法。另外我想知道是否有任何替代方法可以使用 Enum 或 List。

最后我的方法是这样的

public static string getItem(string text)
        {
            string[] stringArray = { "Apple", "Banana", "Orange" };
            string item = stringArray.Where(s => text.ToUpper().Contains(s)).DefaultIfEmpty("None").FirstOrDefault();;
            return item;
        }

【问题讨论】:

    标签: c# arrays string match string-matching


    【解决方案1】:

    只需一点 LINQ 特性,这很容易:

    return stringArray.Where(s => text.Contains(s)).FirstOrDefault();
    

    这假设您只想返回第一个匹配的字符串并且您想要进行区分大小写的比较。如果没有,可以相对容易地进行一些小的修改来改变事情。

    如果您的源代码也是List<string>,上面的代码也同样有效(实际上,任何实现IEnumerable<string> 的代码都可以代替它工作)。另一方面,Enum 不适合这种事情。

    【讨论】:

    • 很好,我知道了,但是如果我的数组列表中没有任何匹配项怎么办。我想如果没有匹配返回/得到“不匹配”。我应该用一个简单的 if 来使用它吗? if (item == null) item = "无法匹配";
    • @Incognito - 您可以将 DefaultIfEmpty("Cannot Match") 粘贴在 Where 和 FirstOrDefault 之间,如果未找到匹配项,这将导致 FirstOrDefault 返回您想要的结果。
    • 非常感谢。最后一件事是我想忽略区分大小写。
    • @Incognito - 您必须使用 IndexOf 而不是 Contains。寻找采用 StringComparison 的重载:msdn.microsoft.com/en-us/library/system.string.indexof.aspx
    • 我将文本转换为大写,这似乎更容易做到。
    【解决方案2】:

    您可以将其设为List<string>,而不是您的数组。然后在你的getItem(),你可以这样做:

    List<string> stringList; // populate how you see fit
    string text="I want an apple";
    
    public static string getItem(string text)
    {
        foreach(var s in stringList)
        {
            if(text.Contains(s))
            {
                // do stuff here
            }
        }
    }
    

    foreach 循环不需要 List&lt;&gt;。拥有它真是太好了。

    【讨论】:

    • 没有理由将字符串数组更改为字符串列表。此代码适用于两者。
    • 对。但他问是否有办法使用List&lt;&gt;。我只是在指路。
    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2011-05-10
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    相关资源
    最近更新 更多