C# Groß-/Kleinschreibungsunabhängige Contains-String-Prüfung
In diesem Tutorial lernen wir verschiedene Möglichkeiten, um case insensitive string contains check in C# zu tun
Es sieht aus wie ein einfaches Problem, aber die Standard-C# string.Contains()
Methode ist case sensitive
Und wenn die Zeichenfolge nicht in englischer Sprache ist, d.h. für andere Sprachen, können wir nicht vergleichen Text case insensitive direkt
Die beiden Strings sollten in der gleichen Kultur sein und wir sollten die Sprachkultur kennen.
Meistens werden wir nur englischsprachige Zeichenketten vergleichen.
Methode 1: Mit C# string.IndexOf()
Methode.
Wir können C# string.IndexOf()
Methode verwenden, um die Groß- und Kleinschreibung zu prüfen.
IndexOf()
die Methode akzeptiert den Parameter StringComparison.OrdinalIgnoreCase
, der die Art der Suche nach den Zeichen angibt.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Methode 2: Verwendung der Methode string.Contains()
in .Net 5+ & .NET Core 2.0+
In den neuesten Versionen von Dot Net, d.h. in .Net Core 2.0+ und .Net 5+. Die Methode string.Contains()
hat eine überladene Methode, die den Parameter StringComparison
akzeptiert.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Methode 3: Verwendung der Methode Regex.IsMatch()
Wir können reguläre Ausdrücke verwenden, um die Groß-/Kleinschreibung bei der Prüfung von Zeichenketten zu berücksichtigen.
Wenn Sie mit Regex
vertraut sind, verwenden Sie die Methode Regex.IsMatch()
und übergeben Sie den Parameter RegexOptions.IgnoreCase
, um die Groß-/Kleinschreibung zu prüfen
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Methode 4: Verwendung von .ToUpper()
& .ToLower()
Wenn die Zeichenketten in englischer Sprache sind und die Leistung kein Problem darstellt, können wir beide Zeichenketten in dieselbe Groß-/Kleinschreibung konvertieren und dann die Prüfung auf “String enthält” durchführen.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Case insensitive Contains check für andere Sprachen
Groß- und Kleinschreibung ist sprachabhängig
In der englischen Sprache ist beispielsweise I
die Großbuchstabenversion von i
.
In der türkischen Sprache hingegen ist die Großschreibung von i
das unbekannte Zeichen İ
.
Um die Groß-/Kleinschreibung zu prüfen, müssen wir das Objekt CultureInfo
verwenden.
var text = "İ";
var check = "i";
CultureInfo trCulture = new CultureInfo("tr-TR",false);
bool englishContains = text.IndexOf(check, StringComparison.OrdinalIgnoreCase) >= 0;
//false
var turkishContains = trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
//true
Ich habe das Objekt CultureInfo
für die türkische Sprache erstellt. Und verglichen beide Zeichenfolgen mit CompareInfo
wie unten gezeigt.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Der beste Weg, um Groß-/Kleinschreibung nicht zu beachten, ist die Prüfung von Contains string
Wenn Sie die neueste Version von .Net
verwenden, benutzen Sie die Methode string.Contains()
.
Ansonsten bleiben Sie bei der Methode string.IndexOf()
.
Bevorzugen Sie nicht die Methoden .ToUpper()
oder To.Lower()
, da diese zu Leistungsproblemen führen können.
Verwenden Sie das Objekt CultureInfo
für Zeichenketten anderer Sprachen.