字符串包含多个单词



在我的项目中,我有一个StringBuilder,它采用下拉列表中的选定值。

StringBuilder builder = new StringBuilder();
builder.Append(ddl_model.SelectedValue);
builder.Append(ddl_language.SelectedValue);
foreach (string str in list)
{
    if (str.Contains(builder.ToString()))
    {
        lstpdfList.Items.Add(str);
    }
}

它的作用只有一个值。我想确保我可以检查是否包含两个或多个单词。

我有一个类似PM12_Manual_Rev1_EN的文件。现在我可以找到它是否含有PM12。但是他们有很多。所以我想检查一下是否含有PM12+EN。

1)不要调用生成器。在foreach中的ToString(),它每次都会重建字符串,这违背了StringBuilder的性能目的。

2) 不要使用StringBuilder,使用一个列表来存储要匹配的单词,如果每个选定的值可能包含多个单词,请将它们拆分:

var keywords = new List<string>();
keywords.AddRange(ddl_model.SelectedValue.Split(' '));
keywords.AddRange(ddl_language.SelectedValue.Split(' '));
foreach(string str in list)
   if (keywords.Any(keyword => str.Contains(keyword))
      lstpdfList.Items.Add(str);

您可以使用正则表达式。

    string testString ="PM12_Manual_Rev1_EN";       
    var wordRegex = new Regex( "PM12.*EN", RegexOptions.IgnoreCase );
    if (wordRegex.IsMatch( testString ))
    {
        Console.WriteLine("we've found multiple matches, REGEX edition");       
    }

或者你可以像这样使用Contains和Linq:

    string testString ="PM12_Manual_Rev1_EN";
    var checkWords = new List<String>() {"PM12", "EN"};
    if(checkWords.All(w => testString.Contains(w)))
    {
        Console.WriteLine("we've found multiple matches");      
    }

您应该使用String.Contains方法,这是最简单的方法!它返回一个值,指示指定的String对象是否出现在此字符串中。

@Shaks是对的。

最新更新