我正在使用以下代码比较两个字符串:
string1.Contains(string2)
但是,我无法得到不区分大小写搜索的结果。此外,我不能使用String.Compare,因为我不想将整个名称作为匹配项,因为名称太长了。 我的需求是进行不区分大小写搜索,并且搜索文本可以是任意长度,而该文本必须包含在String1中。
例如,术语 ************** 是名称。 我在文本框中输入 "erm" 然后得到结果。但是当我输入 "term" 时,我没有得到任何结果。 有谁能帮帮我呢 :)
我正在使用以下代码比较两个字符串:
string1.Contains(string2)
但是,我无法得到不区分大小写搜索的结果。此外,我不能使用String.Compare,因为我不想将整个名称作为匹配项,因为名称太长了。 我的需求是进行不区分大小写搜索,并且搜索文本可以是任意长度,而该文本必须包含在String1中。
例如,术语 ************** 是名称。 我在文本框中输入 "erm" 然后得到结果。但是当我输入 "term" 时,我没有得到任何结果。 有谁能帮帮我呢 :)
试试这个:
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);
请注意:上述扩展方法(对于所有扩展方法都是如此)应在非嵌套、非泛型的静态类中定义。请参阅MSDN参考
if (string1.ToLower().Contains(string2.ToLower())) { }
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);
这将返回布尔值......