字符串包含多个单词

时间:2012-09-05 08:44:53

标签: c# string contains

在我的项目中,我有一个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。

3 个答案:

答案 0 :(得分:4)

1)不要在foreach中调用builder.ToString(),它会每次都重建字符串,这会破坏StringBuilder的性能目的。

2)不要使用StringBuilder,使用List来存储你想要匹配的单词,如果每个选中的值可能包含多个单词,则拆分它们:

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);

答案 1 :(得分:0)

你可以use regexes

    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");       
    }

或者您可以像这样使用包含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");      
    }

答案 2 :(得分:0)

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

@Shaks有权。