首页 / C#开发 / 正文

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

78409 发布于: 2014-07-15 读完约需11分钟

前段时间写了一篇《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);
    }
  }
}

本文就写这两种实现方法,每个人都有自己的处理方式,仁者见仁。如有问题,欢迎留言反馈。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: EXT.NET GridPanel中如何改变选中行的样式(包括前端JS)

下一篇: C#将字符串中的URL地址添加A标签

本文永久链接码友网 » C#如何判断一个字符串中是否包含另一个字符串数组或列表中的任何一个元素

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册