C#如果判断一个字符串中是否包含另一个字符串数组或列表中的任何一个元素

C#开发 2014-07-15 57142阅读 0评论 0收藏 收藏本文

前段时间写了一篇《C#正则表达式判断一个字符串中是否包含某个字词》的文章,那篇文章中的判断只是对单个字符串的精确匹配判断,但对于本文标题中所描述的情形并不适用,如现在有以下需求:

var str="This is a test string.";
var excludeWordList=new List<string>{"is","test","string"};
我们要判断str字符串中里有包含excludeWordList中的任何一个元素,应该怎么处理呢? 首先要说的是这种判断的做法有很多种: 方法一:FOREACH循环
/// <summary>
    /// foreach循环(非LINQ表达式)
    /// </summary>
    /// <param name="str"></param>
    /// <param name="excludeWordList"></param>
    /// <returns></returns>
    static bool CheckMethod_1(string str, ICollection<string> excludeWordList)
    {
      if (str.Trim().Length <= 0 || excludeWordList == null || excludeWordList.Count <= 0)
      {
        return false;
      }
      var contain = false;
      foreach (var el in excludeWordList)
      {
        if (str.Contains(el))
        {
          contain = true;
          break;;
        }
      }
      return contain;
    }
方法二:LINQ表达式
/// <summary>
    /// LINQ表达式
    /// </summary>
    /// <param name="str"></param>
    /// <param name="excludeWordList"></param>
    /// <returns></returns>
    static bool CheckMethod_2(string str, ICollection<string> excludeWordList = null)
    {
      if (str.Trim().Length <= 0 || excludeWordList == null || excludeWordList.Count <= 0)
      {
        return false;
      }
      return excludeWordList.Any(s => str.IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0);
    }
这两种方法都可以完成判断工作,但需要注意的是,第一种方法中使用的string.Contains(string)方法是区分大小写的,即你把excludeWordList写成: excludeWordList = new List<string> { "Is", "Test", "String" };是检测不到元素的,当然,第一种方法中用string.IndexOf(string,StringComparison)这个重载方法也是完全可以的,在这里我是为了举例说明Contains和Any的区别。 下面提供本例的完整实例代码,仅供参考:
using System;
using System.Collections.Generic;
using System.Linq;

namespace Test
{
  class Program
  {
    static void Main(string[] args)
    {
      const string str = "This is a test string.";
      var excludeWordList = new List<string> { "is", "test", "string" };
      Console.WriteLine("字符串{0}{1}检测集合中的元素", str, CheckMethod_1(str, excludeWordList) ? "包含" : "不包含");
      Console.WriteLine("字符串{0}{1}检测集合中的元素", str, CheckMethod_2(str, excludeWordList) ? "包含" : "不包含");
      Console.ReadKey();
    }

    /// <summary>
    /// foreach循环(非LINQ表达式)
    /// </summary>
    /// <param name="str"></param>
    /// <param name="excludeWordList"></param>
    /// <returns></returns>
    static bool CheckMethod_1(string str, ICollection<string> excludeWordList)
    {
      if (str.Trim().Length <= 0 || excludeWordList == null || excludeWordList.Count <= 0)
      {
        return false;
      }
      var contain = false;
      foreach (var el in excludeWordList)
      {
        if (str.Contains(el))
        {
          contain = true;
          break;;
        }
      }
      return contain;
    }

    /// <summary>
    /// LINQ表达式
    /// </summary>
    /// <param name="str"></param>
    /// <param name="excludeWordList"></param>
    /// <returns></returns>
    static bool CheckMethod_2(string str, ICollection<string> excludeWordList = null)
    {
      if (str.Trim().Length <= 0 || excludeWordList == null || excludeWordList.Count <= 0)
      {
        return false;
      }
      return excludeWordList.Any(s => str.IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0);
    }
  }
}
本文就写这两种实现方法,每个人都有自己的处理方式,仁者见仁。如有问题,欢迎留言反馈。

转载请注明:图享网 » C#如果判断一个字符串中是否包含另一个字符串数组或列表中的任何一个元素

文章评论

获取验证码