C#不区分大小写的字符串包含检查
在本教程中,我们将学习在C#中进行不区分大小写的字符串包含检查的不同方法。
这看起来是一个简单的问题,但是默认的C#string.Contains()
方法是区分大小写的。
而如果字符串不是英语语言,即对于其他语言,我们不能直接比较文本的大小写不敏感。
两个字符串应该在同一文化中,我们应该知道语言文化。
大多数情况下,我们只比较英语语言的字符串。
方法1:使用C#string.IndexOf()
方法。
我们可以使用C#string.IndexOf()
方法来做不分大小写的字符串包含检查。
IndexOf()
该方法接受StringComparison.OrdinalIgnoreCase
参数,该参数指定了要使用的字符搜索类型。
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
方法2:在.Net 5+ & .NET Core 2.0+中使用string.Contains()
方法。
在最新版本的dot net中,即在.Net Core 2.0+和.Net 5+中。string.Contains()
方法有一个重载方法,它接受StringComparison
参数。
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
方法3:使用Regex.IsMatch()
方法
我们可以使用正则表达式来做不区分大小写的包含字符串检查。
如果你熟悉Regex
,使用Regex.IsMatch()
方法,并通过RegexOptions.IgnoreCase
参数来检查不区分大小写。
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
方法4:使用.ToUpper()
&.ToLower()
如果字符串是英文,并且性能不是问题,我们可以将两个字符串转换成相同的大小写,然后进行字符串包含检查。
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C#对大小写不敏感的其他语言的包含检查
大小写不敏感是与语言有关的。
例如,在英语中,I
是i
的大写版本。
而在土耳其语中,i
的大写版本是陌生的字符İ
。
为了进行不区分大小写的字符串检查,我们需要使用CultureInfo
对象。
var text = "İ";
var check = "i";
CultureInfo trCulture = new CultureInfo("tr-TR",false);
bool englishContains = text.IndexOf(check, StringComparison.OrdinalIgnoreCase) >= 0;
//false
var turkishContains = trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
//true
我已经为土耳其语创建了CultureInfo
对象。并使用CompareInfo
比较这两个字符串,如下所示。
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
做不区分大小写的包含字符串检查的最佳方法
如果你使用的是最新版本的.Net
,请使用string.Contains()
方法。
否则坚持使用string.IndexOf()
方法。
不要选择.ToUpper()
或To.Lower()
方法,因为它们可能导致性能问题。
对其他语言的字符串使用CultureInfo
对象。