0

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

4

3 回答 3

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);
于 2012-09-05T08:56:39.503 回答
0

你可以使用正则表达式

    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");      
    }
于 2012-09-05T08:57:12.200 回答
0

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

@Shaks 是对的。

于 2012-09-05T09:02:21.060 回答