案例C#中的不敏感比较
我正在使用以下代码比较两个字符串
string1.Contains(字符串2)
但我没有得到不区分大小写搜索的结果。 此外,我不能使用String.Compare因为我不想匹配整个名称,因为名称非常大。 我需要进行不区分大小写的搜索,搜索文本可以是String1包含的任何长度。
例如* * ** * ** * ** * ** *是名称。 我在文本框中输入“erm”,我得到了结果。 但当我输入“期限”时,我得不到任何结果。 谁能帮我 :)
string.Equals("this will return true", "ThIs WiLL ReTurN TRue", StringComparison.CurrentCultureIgnoreCase)
或者,对于包含
if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)
我更喜欢像这样的扩展方法。
public static class StringExtensions { public static bool Contains(this string source, string value, StringComparison compareMode) { if (string.IsNullOrEmpty(source)) return false; return source.IndexOf(value, compareMode) >= 0; } }
请注意,通过这种方式,您可以避免在大写或小写中进行代价高昂的转换。
您可以使用此语法调用扩展
bool result = "This is a try".Contains("TRY", StringComparison.InvariantCultureIgnoreCase); Console.WriteLine(result);
请注意:上面的扩展名(对于每个扩展方法都是如此)应该在非嵌套的非generics静态类中定义。 请参阅MSDN参考
将两个字符串转换为相同的大小写或更低的 大小写 。
string1.ToUpper().Contains(string2.ToUpper());
为什么不这样:
if(string1.IndexOf(string2,StringComparison.OrdinalIgnoreCase)> = 0) { }
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());
您可以将两个字符串转换为大写,也可以使用正则表达式:
using System.Text.RegularExpressions; class Program { static void Main(string[] args) { string string1 = "TermSomething"; string string2 = "term"; bool test1 = string1.ToUpperInvariant().Contains(string2.ToUpperInvariant()); bool test2 = Regex.IsMatch(string1, Regex.Escape(string2), RegexOptions.IgnoreCase); } }
请注意,如果使用正则表达式,则应该转义搜索字符串,以便按字面解释特殊的正则表达式字符。
Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase);
这返回布尔值…..