前段时间写了一篇《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);
}
}
}
本文就写这两种实现方法,每个人都有自己的处理方式,仁者见仁。如有问题,欢迎留言反馈。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册