C# Case insensitive Contains string check
Selles õpetuses õpime erinevaid viise, kuidas teha suur- ja väiketundlikku stringi sisaldab kontrollimist C# keeles
Tundub lihtne probleem, kuid C# string.Contains()
meetod on vaikimisi suur- ja väiketundlik
Ja kui string ei ole inglise keeles, st teiste keelte puhul ei saa me otseselt võrrelda teksti case insensitive
Mõlemad stringid peaksid olema samas kultuuris ja me peaksime teadma keele kultuuri.
Enamasti võrdleme ainult ingliskeelseid stringisid.
Meetod 1: Kasutades C# string.IndexOf()
meetodit.
Me võime kasutada C# string.IndexOf()
meetodit, et teha suur- ja väiketähelepanuta string contains check.
IndexOf()
meetod võtab vastu parameetri StringComparison.OrdinalIgnoreCase
, mis määrab, millist tüüpi otsingut kasutatakse märkide jaoks.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Meetod 2: meetodi string.Contains()
kasutamine .Net 5+ ja .NET Core 2.0+ versioonides
Viimastes dot net versioonides, st .Net Core 2.0+ ja .Net 5+. string.Contains()
meetodil on ülekoormatud meetod, mis võtab vastu parameetri StringComparison
.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Meetod 3: Regex.IsMatch()
meetodi kasutamine
Me võime kasutada regulaarseid väljendeid, et teha suur- ja väiketähelepanuta sisaldab stringi kontrolli.
Kui olete tuttav Regex
, kasutage Regex.IsMatch()
meetodit ja kontrollige suur- ja väiketähelepanu kontrollimiseks andke parameeter RegexOptions.IgnoreCase
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Meetod 4: Kasutades .ToUpper()
& .ToLower()
Kui stringid on inglise keeles ja jõudlus ei ole probleemiks, võime konverteerida mõlemad stringid samasse korpusesse ja seejärel teha string contains check.
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 teiste keelte puhul
Suur- ja väiketähenduslikkus on keelest sõltuv
Näiteks inglise keeles on I
suurtähtedega versioon i
.
Türgi keeles on aga suurtähtedega versioon i
tundmatu tähemärk İ
.
Suur- ja väiketähtedeta stringi kontrollimiseks peame kasutama CultureInfo
objekti.
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
Olen loonud CultureInfo
objekti türgi keele jaoks. Ja võrdlesin mõlemat stringi kasutades CompareInfo
nagu allpool näidatud.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Parim viis teha Case insensitive Contains string check
Kui kasutate .Net
uusimat versiooni, kasutage string.Contains()
meetodit.
Vastasel juhul kasutage string.IndexOf()
meetodit.
Ärge eelistage .ToUpper()
või To.Lower()
meetodit, kuna need võivad põhjustada probleeme jõudlusega.
Kasutage CultureInfo
objekti teiste keelte stringide jaoks.