C# Didžiųjų ir mažųjų raidžių neatspari eilutės Contains patikra

Šioje pamokoje mokomės įvairių būdų, kaip C# kalba patikrinti eilutę, kurioje yra, neatsižvelgiant į mažųjų ir didžiųjų raidžių skirtumus

Atrodo, kad tai paprasta problema, tačiau numatytuoju C# string.Contains() metodu atsižvelgiama į mažąsias ir didžiąsias raides

O jei eilutė yra ne anglų kalba, t. y. kitų kalbų, negalime tiesiogiai lyginti teksto, neatsižvelgdami į mažąsias ir didžiąsias raides

Abi eilutės turi būti tos pačios kultūros ir Mes turime žinoti kalbos kultūrą.

Dažniausiai lyginsime tik anglų kalbos eilutes.

1 metodas: naudojant C# string.IndexOf() metodą.

Galime naudoti C# string.IndexOf() metodą, kad patikrintume, ar eilutėje yra mažųjų ir didžiųjų raidžių.

IndexOf() metodas priima StringComparison.OrdinalIgnoreCase parametrą, kuris nurodo, kokio tipo simbolių paiešką naudoti.


string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;

2 būdas: string.Contains() metodo naudojimas .NET 5+ ir .NET Core 2.0+

Naujausiose “dot net” versijose, t. y. .Net Core 2.0+ ir .Net 5+. Metodas string.Contains() turi perkrovimo metodą, kuris priima parametrą StringComparison.


string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);

3 metodas: naudojant Regex.IsMatch() metodą

Galime naudoti reguliarias išraiškas, kad atliktume tikrinimo eilutę contains string, neatsižvelgdami į mažąjį ar didįjį raidžių skirtumą.

Jei esate susipažinę su Regex, naudokite Regex.IsMatch() metodą, o norėdami patikrinti, ar nepažeista didžioji ir mažoji raidės, perduokite RegexOptions.IgnoreCase parametrą

var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);

//true

4 metodas: naudojant .ToUpper() & .ToLower()

Jei eilutės yra anglų kalba ir našumas nėra problema, galime konvertuoti abi eilutes į tą pačią raidę, tada atlikti eilutės yra patikrinimą.


var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or 
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());

//true

## C# Kitų kalbų tikrinimas “Contains”, kai neatsižvelgiama į mažąją raidę

Didžiųjų ir mažųjų raidžių nejautrumas priklauso nuo kalbos

Pavyzdžiui, anglų kalboje I yra i didžiosios raidės.

Tuo tarpu turkų kalboje didžioji i raidė yra nepažįstamas simbolis İ.

Norėdami patikrinti eilutę, neatsižvelgdami į mažąsias ir didžiąsias raides, turime naudoti objektą CultureInfo.


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

Sukūriau CultureInfo objektą turkų kalbai. Ir palyginau abi eilutes naudodamas CompareInfo, kaip parodyta toliau.

trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;

Geriausias būdas patikrinti eilutę “Contains”, neatsižvelgiant į mažąsias ir didžiąsias raides

Jei naudojate naujausią .Net versiją, naudokite string.Contains() metodą.

Priešingu atveju naudokite string.IndexOf() metodą.

Nesirinkite .ToUpper() arba To.Lower() metodo, nes dėl jų gali kilti našumo problemų.

Kitų kalbų eilutėms naudokite CultureInfo objektą.