C#中的大小写不敏感比较

17

我正在使用以下代码比较两个字符串:

string1.Contains(string2)

但是,我无法得到不区分大小写搜索的结果。此外,我不能使用String.Compare,因为我不想将整个名称作为匹配项,因为名称太长了。 我的需求是进行不区分大小写搜索,并且搜索文本可以是任意长度,而该文本必须包含在String1中。

例如,术语 ************** 是名称。 我在文本框中输入 "erm" 然后得到结果。但是当我输入 "term" 时,我没有得到任何结果。 有谁能帮帮我呢 :)

7个回答

19

试试这个:

string.Equals("this will return true", "ThIs WiLL ReTurN TRue", StringComparison.CurrentCultureIgnoreCase)
或者,对于包含的情况:
if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)

10

我更喜欢像这样的扩展方法。

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参考


扩展不兼容.NET 2.0... - gethomast
contains方法是默认的,即使我更改了您的方法名称,也不会得到扩展。我认为我做错了什么。 - PhOeNiX
你是否将上述代码插入到静态类中? - Steve

6

将两个字符串转换为相同的大小写,可以是大写小写

string1.ToUpper().Contains(string2.ToUpper());

5
为什么不这样写:
if (string1.ToLower().Contains(string2.ToLower()))
{
}

这样可以忽略字符串大小写,并且更加简洁易懂。

我喜欢这个!我甚至不知道IndexOf有一个接受“StringComparison”的重载。 - Paolo Tedesco
这对我有效..!!!! 谢谢编程 - PhOeNiX

0
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());

0

你可以将两个字符串都转换为大写,或者使用正则表达式:

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);
    }
}

请注意,如果您使用正则表达式,则应该转义搜索字符串,以便特殊的正则表达式字符被解释为字面意思。

正则表达式是否逐个字符匹配?例如,“er”是否存在于“Term”中? - PhOeNiX
@PhOeNiX:如果你所说的“逐字符比较”是指“er”和“re”不同,那么是的... - Paolo Tedesco

0
Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase);

这将返回布尔值......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接