Вопрос по c#, string – Сравнение без учета регистра в C # [дубликат]

8

This question already has an answer here:

Case insensitive 'Contains(string)' 24 answers

Я сравниваю две строки, используя следующий код

string1.Contains (строка2)

но я не получаю результаты для поиска без учета регистра. Кроме того, я не могу использовать String.Compare, потому что я не хочу соответствовать целому имени, так как имя очень большое. Мне нужно иметь поиск без учета регистра, и текст поиска может иметь любую длину, которая содержится в String1.

Например срок ************** это имя.    Я ввожу "erm" в текстовом поле ден я получаю результат. но когда я ввожу "термин" я не получаю никакого результата. Может кто-нибудь мне помочь :)

Ваш Ответ

7   ответов
0

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

Конвертировать обе строки вsame case, иливерхний или жениже.

string1.ToUpper().Contains(string2.ToUpper());
Error: User Rate Limit Exceeded
0

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

Это возвращает логическое значение .....

17

string.Equals("this will return true", "ThIs WiLL ReTurN TRue", StringComparison.CurrentCultureIgnoreCase)

или, содержит

if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)

Error: User Rate Limit Exceeded PhOeNiX
5

Почему бы не это:

if (string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0)
{  
}
Error: User Rate Limit Exceeded PhOeNiX
Error: User Rate Limit ExceededStringComparison.
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 Ref

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded PhOeNiX
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);
    }
}

Обратите внимание, что если вы используете регулярные выражения, вы должны экранировать строку поиска, чтобы специальные символы регулярного выражения интерпретировались буквально.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded PhOeNiX

Похожие вопросы