如何测试子字符串是否包含在其他中,但不区分大小写?
string1.Contains(string2)
不区分大小写。如果没有现有的方法,我想写一个优化的方法,有什么指针吗?
编辑:它也应该适用于全球化。
您可以在执行检查之前将两个字符串都转换为大写:
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant())
或者,如果您想在定义不区分大小写时考虑当前文化:
string1.ToUpper().Contains(string2.ToUpper())
或者,您甚至可以通过调用ToUpper
接受CultureInfo
.
代码分析警告 CA1308: Normalize strings to uppercase中描述了您应该转换为大写而不是小写的原因:
字符串应规范化为大写。一小部分字符在转换为小写时不能往返。往返意味着将字符从一种语言环境转换到另一种以不同方式表示字符数据的语言环境,然后从转换后的字符中准确地检索出原始字符。
您可能想知道哪些“小部分字符”会受此影响,并且根据Michael S. Kaplan的说法,显然至少一些格鲁吉亚文字存在此问题。
使用String.IndexOf 方法 (String, StringComparison)
string str = "Some test String";
string str2 = "test";
if (str.IndexOf(str2, StringComparison.InvariantCultureIgnoreCase) > 0)
{
//str contains str2
}
else
{
//str does not contain str2
}
string1.ToUpper().Contains(string2.ToUpper())
你可以使用这个重载String.IndexOf Method (String, StringComparison)
为了StringComparison.InvariantCultureIgnoreCase
使用区分区域性的排序规则、不变的区域性比较字符串,并忽略要比较的字符串的大小写。
string string1 = "YOURSTRING";
bool containsornot = string1 .IndexOf("yourstring", StringComparison.InvariantCultureIgnoreCase) >= 0;
这是一个DEMO
.
你试过string1.IndexOf(string2, StringComparison.InvariantCultureIgnoreCase)
或使用StringComparison.OrdinalIgnoreCase