සිද්ධි සංවේදී නොවන 'අඩංගු වේ (නූල්)'


2917

පහත දැක්වෙන ප්‍රතිලාභ සැබෑ කර ගැනීමට ක්‍රමයක් තිබේද?

string title = "ASTRINGTOTEST";
title.Contains("string");

සිද්ධි සංවේදීතාව සැකසීමට මට ඉඩ සලසන අධික බරක් ඇති බවක් නොපෙනේ .. දැනට මම ඔවුන් දෙදෙනාම අභිබවා යමි, නමුත් එය මෝඩකමකි (එයින් මම සඳහන් කරන්නේ ඉහළ හා පහළ ආවරණ සහිත i18n ගැටළු ගැන ය).

යාවත්කාලීන කිරීම
මෙම ප්‍රශ්නය පුරාණ වන අතර එතැන් සිට මම තේරුම් ගත්තා ඔබ එය සම්පූර්ණයෙන් විමර්ශනය කිරීමට කැමති නම් සැබවින්ම විශාල හා දුෂ්කර මාතෘකාවක් සඳහා සරල පිළිතුරක් ඉල්ලා ඇති බව.
බොහෝ අවස්ථාවන්හීදී, ඒකභාෂා, ඉංග්‍රීසි කේත පදනම් කරගෙන මෙම පිළිතුර ප්‍රමාණවත් වේ. මම සැක කරන්නේ මෙහි පැමිණෙන බොහෝ දෙනා මෙම ගණයට වැටෙන නිසා මෙය වඩාත්ම ජනප්‍රිය පිළිතුරයි. කෙසේවෙතත්,
මෙම පිළිතුර මගින් පෙළ දෙකම එකම සංස්කෘතියක් බව දැනගෙන එම සංස්කෘතිය යනු කුමක්දැයි අප දැන ගන්නා තෙක් අපට පෙළ නඩුව සංවේදී නොවන ලෙස සංසන්දනය කළ නොහැකි සහජ ගැටලුව මතු කරයි. මෙය සමහර විට අඩු ජනප්‍රිය පිළිතුරක් විය හැකි නමුත් මම සිතන්නේ එය වඩාත් නිවැරදියි, ඒ නිසා මම එය එසේ සලකුණු කළෙමි.

Answers:


1403

නූලෙහි නූල් paragraphඅඩංගු දැයි පරීක්ෂා කිරීමට word(ස්තූතියි uQuarterMeister)

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

පා written ය ලියා ඇති භාෂාව විස්තර cultureකිරීමේ අවස්ථාව කොහිද?CultureInfo

මෙම විසඳුම භාෂාව මත රඳා පවතින සිද්ධි-සංවේදීතාවයේ අර්ථ දැක්වීම පිළිබඳව විනිවිද පෙනෙන ය . උදාහරණයක් ලෙස, ඉංග්රීසි භාෂාවේ අකුරු භාවිතා කරයි Iසහ iනවවන ලිපිය ඉහළ හා පහළ නඩුව සංස්කරණ තුර්කි භාෂා සඳහා මෙම අක්ෂර භාවිතා කරයි බැවින්ද සඳහා එකොළොස් සහ දොළොස්වන ලිපි එහි 29 ලිපිය දිගු හෝඩියේ. 'I' හි තුර්කි ඉහළ අකුරු අනුවාදය 'İ' නුහුරු චරිතයකි.

මේ අනුව නූල් tinසහ ඉංග්‍රීසියෙන්TIN එකම වචනය , නමුත් තුර්කි භාෂාවෙන් වෙනස් වචන . මා තේරුම් ගත් පරිදි, එක් අර්ථයක් 'ආත්මය' වන අතර අනෙක ඔනෝමැටෝපියා වචනයකි. (ටර්ක්ස්, කරුණාකර මා වැරදියි නම් මාව නිවැරදි කරන්න, නැතහොත් වඩා හොඳ උදාහරණයක් යෝජනා කරන්න)

සාරාංශගත කිරීම සඳහා, ඔබට පිළිතුරු දිය හැක්කේ 'මෙම නූල් දෙක එක හා සමාන නමුත් විවිධ අවස්ථා වලදී' යන පා text ය කුමක්දැයි ඔබ දන්නේ නම් පමණි . ඔබ නොදන්නේ නම්, ඔබට පන්ච් එකක් ගැනීමට සිදුවේ. මෘදුකාංග පිළිබඳ ඉංග්‍රීසි ආධිපත්‍යය සැලකිල්ලට ගෙන, ඔබ බොහෝ විට යොමුවිය යුත්තේ CultureInfo.InvariantCultureඑය හුරුපුරුදු ආකාරවලින් වැරදියි.


67
ඇයි නැත්තේ culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0? එය නිවැරදි සංස්කෘතිය භාවිතා කරන අතර එය සංවේදී නොවන අතර එය තාවකාලික සිම්පල් නූල් වෙන් නොකරයි, තවද එය කුඩා අකුරුවලට පරිවර්තනය කිරීම හා සංසන්දනය කිරීම සැමවිටම සිද්ධි-සංවේදී නොවන සංසන්දනයකට සමානද යන ප්‍රශ්නය මග හැරේ.
කාර්තුමාස්ටර්

9
සෙවීමේ කාර්යයක් විය යුත්තේ කුමක් සඳහාද යන්න මතකය වෙන් කිරීමෙන් මෙම විසඳුම අනවශ්‍ය ලෙස
ගොඩවල් දූෂණය

15
ToLower () සමඟ සංසන්දනය කිරීමෙන් වෙනස් අක්ෂර දෙකකට එකම කුඩා අකුරු ඇති විට සිද්ධි-සංවේදී නොවන දර්ශකයෙන් වෙනස් ප්‍රති results ල ලැබෙනු ඇත. උදාහරණයක් ලෙස, U + 0398 “ග්‍රීක කැපිටල් අකුරු තීටා” හෝ U + 03F4 “ග්‍රීක කැපිටල් අකුරු තීටා සංකේතය” ට ටොලෝවර් () ඇමතීමෙන් U + 03B8, “ග්‍රීක කුඩා අකුරු තීටා” ලැබෙනු ඇත, නමුත් ලොකු අකුරු වෙනස් ලෙස සැලකේ. මෙම විසඳුම් දෙකම U + 0073 “ලතින් කුඩා අකුරු S” සහ U + 017F “ලතින් කුඩා අකුරු දිගු එස්” වැනි එකම ලොකු අකුරක් සහිත කුඩා අකුරු සලකා බලයි, එබැවින් IndexOf විසඳුම වඩාත් අනුකූල බව පෙනේ.
කාර්තුමාස්ටර්

3
.Quartermeister - සහ BTW, .NET 2 සහ .NET4 මේ සම්බන්ධයෙන් වෙනස් ලෙස හැසිරෙනු ඇත .NET 4 සෑම විටම NORM_LINGUISTIC_CASING භාවිතා කරන අතර .NET 2 එසේ නොකළේය (මෙම කොඩි වින්ඩෝස් විස්ටා සමඟ දර්ශනය වී ඇත).
සයිමන් මොරියර්

10
ඔබ "ddddfg" ලිව්වේ නැත්තේ ඇයි ?IndexOf ("Df", StringComparison.OrdinalIgnoreCase)?
චෙන්

2716

ඔබ භාවිතා කළ හැකි String.IndexOf ක්රමය හා සම්මත StringComparison.OrdinalIgnoreCaseභාවිතා කිරීම, සොයන්න වර්ගය ලෙස:

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

නූල් සඳහා නව දිගු කිරීමේ ක්‍රමයක් නිර්වචනය කිරීම ඊටත් වඩා හොඳ ය:

public static class StringExtensions
{
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source?.IndexOf(toCheck, comp) >= 0;
    }
}

පැරණි අනුවාදයන් සඳහා C # 6.0 (VS 2015) සිට ශුන්‍ය ප්‍රචාරණය ?. ලබා ගත හැකි බව සලකන්න

if (source == null) return false;
return source.IndexOf(toCheck, comp) >= 0;

භාවිතය:

string title = "STRING";
bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase);

3
නියම නූල් දිගු කිරීමේ ක්‍රමය! ක්‍රියා කරන විට කිසියම් වස්තු යොමු දෝෂයක් ඇතිවීම වැළැක්වීම සඳහා මූලාශ්‍ර නූල අහෝසි නොවන බව පරීක්ෂා කිරීම සඳහා මම මගේ සංස්කරණය කර ඇත .IndexOf ().
රිචඩ් පර්ස්හවුස්

8
මෙම සමාන පිළිතුරු ලබා දුන paragraph.ToLower(culture).Contains(word.ToLower(culture))සමග CultureInfo.InvariantCultureඑය ඕනෑම දේශීයකරණ ගැටලූ විසඳන්නේ නැහැ. ඕනෑවට වඩා දේවල් සංකීර්ණ කරන්නේ ඇයි? stackoverflow.com/a/15464440/284795
කර්නල්

61
OLColonelPanic ToLowerඅනුවාදයට සංසන්දනය / සෙවීමේ මෙහෙයුමකදී අනවශ්‍ය ප්‍රතිපාදන 2 ක් ඇතුළත් වේ. එය අවශ්‍ය නොවන අවස්ථාවක අනවශ්‍ය ලෙස වෙන් කරන්නේ ඇයි?
ජරෙඩ්පාර්

4
වැඩ නැති නිසා @Seabiscuit stringක ඇත IEnumerable<char>ඒ නිසා ඔබ එය substrings සොයා ගැනීමට භාවිතා කළ හැකි නොවේ
JaredPar

6
අනතුරු ඇඟවීමේ වචනයක්: පෙරනිමිය string.IndexOf(string)වත්මන් සංස්කෘතිය භාවිතා කිරීම වන අතර පෙරනිමිය string.Contains(string)වන්නේ සාමාන්‍ය සංසන්දකය භාවිතා කිරීමයි. අප දන්නා පරිදි, කලින් වෙනස් කළ හැක්කේ දිගු බරක් තෝරා ගැනීමක් වන අතර දෙවැන්න වෙනස් කළ නොහැක. මෙම නොගැලපීමේ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; string self = "Waldstrasse"; string value = "straße"; Console.WriteLine(self.Contains(value));/* False */ Console.WriteLine(self.IndexOf(value) >= 0);/* True */
ජෙප් ස්ටිග් නීල්සන්

231

ඔබට මේ ආකාරයට භාවිතා කළ හැකිය IndexOf():

string title = "STRING";

if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
{
    // The string exists in the original
}

0 (බිංදුව) දර්ශකයක් විය හැකි බැවින්, ඔබ -1 ට එරෙහිව පරීක්ෂා කරන්න.

MSDN

එම නූල සොයාගත හොත්, නැතිනම් -1 නම් ශුන්‍ය පාදක දර්ශක අගය. අගය String.Empty නම්, ප්‍රතිලාභ අගය 0 වේ.


148

Regex භාවිතා කරමින් විකල්ප විසඳුම:

bool contains = Regex.IsMatch("StRiNG to search", Regex.Escape("string"), RegexOptions.IgnoreCase);

6
හොඳ අදහස, RegexOptions.IgnoreCase & RegexOptions.IgnorePatternWhitespace & RegexOptions.CultureInvariant;ඕනෑම කෙනෙකුට උදව් කළහොත් වැනි RegexOptions හි අපට බිට්වේස් සංයෝජන රාශියක් ඇත .
සරවනන්

7
පිළිවෙලට ඉස්මාච් භාවිතා කළත් මම මෙම ක්‍රමයට වැඩි කැමැත්තක් දක්වන බව පැවසිය යුතුය.
wonea

31
නරකම දෙය නම්, සෙවුම් දාමය රීජෙක්ස් ලෙස අර්ථකථනය කර ඇති හෙයින්, විරාම ලකුණු කිහිපයක් වැරදි ප්‍රති results ල ලබා දෙනු ඇත (හෝ අවලංගු ප්‍රකාශනයක් හේතුවෙන් ව්‍යතිරේකයක් අවුලුවයි). "."ඇතුළත සෙවීමට උත්සාහ කරන්න "This is a sample string that doesn't contain the search string". නැතහොත් ඒ සඳහා සෙවීමට උත්සාහ කරන්න "(invalid".
cHao

17
HcHao: එවැනි අවස්ථාවකදී Regex.Escapeඋදව් කළ හැකිය. IndexOf/ දිගුව Containsසරල වූ විට (සහ වඩාත් පැහැදිලිව) රීජෙක්ස් තවමත් අනවශ්‍ය බව පෙනේ .
ඩෑන් මැන්ගරෙලි

6
මෙම රීජෙක්ස් විසඳුම යන්න හොඳම ක්‍රමය බව මා ඇඟවූයේ නැති බව සලකන්න. මා විසින් පළ කරන ලද මුල් ප්‍රශ්නයට පිළිතුරු ලැයිස්තුවට එකතු කරමින් සිටියේ “පහත දැක්වෙන ප්‍රතිලාභ සත්‍ය බවට පත් කිරීමට ක්‍රමයක් තිබේද?”.
ජෙඩ්

80

ඔබට සෑම විටම පළමුව නූල් ඉහළට හෝ පහත් කළ හැකිය.

string title = "string":
title.ToUpper().Contains("STRING")  // returns true

අපොයි, අන්තිම මොහොත දුටුවා. අසංවේදී සංසන්දනය ඇති නඩුව ඇත *සමහර විට *එම කෙසේ හෝ කරන්න, සහ කාර්ය සාධනය පිළිබඳ ප්රශ්නයක් නොවේ නම්, මම ලොකු අකුරු පිටපත් නිර්මාණය කිරීම සහ එම සංසන්දනය සමග ගැටළුවක් දකින්නේ නැහැ. මට දිවුරුම් දෙන්න තිබුණා මම වරක් සිද්ධි-සංවේදී නොවන සංසන්දනයක් දුටු බව ...


122
"තුර්කි පරීක්ෂණය" සඳහා සොයන්න :)
ජෝන් ස්කීට්

8
සමහර ප්‍රංශ පෙදෙස්වල, ලොකු අකුරු වල අක්ෂර වින්‍යාසය නොමැත, එබැවින් ToUpper () ToLower () ට වඩා හොඳ නොවනු ඇත. නිසි මෙවලම් තිබේ නම් ඒවා භාවිතා කරන්නැයි මම කියමි - සිද්ධි සංවේදී නොවන සංසන්දනය.
බ්ලෙයාර් කොන්රාඩ්

5
ToUpper හෝ ToLower භාවිතා නොකර ජෝන් ස්කීට් පැවසූ දේ කරන්න
පීටර් ගෆඩර්

14
අවුරුදු දෙකකට පසු මෙය නැවත දැක ඇති අතර නව පසුබෑමක් ... කෙසේ වෙතත්, නූල් සංසන්දනය කිරීමට වඩා හොඳ ක්‍රම ඇති බව මම එකඟ වෙමි. කෙසේ වෙතත්, සෑම වැඩසටහනක්ම දේශීයකරණය නොවනු ඇත (බොහෝමයක් එසේ නොවේ) සහ බොහෝ ඒවා අභ්‍යන්තර හෝ ඉවතලන යෙදුම් වේ. ඉවතලෑමේ යෙදුම් සඳහා හොඳම උපදෙස් සඳහා ණය ලබා ගැනීම මට කිසිසේත්ම අපේක්ෂා කළ නොහැකි බැවින් ... මම ඉදිරියට යමි: ඩී
එඩ් එස්.

8
"තුර්කිය පරීක්ෂණය" සෙවීම "ටර්කි ටෙස්ට්" සෙවීම හා සමානද?
ජැක් ඒස්

58

.NET Core 2.0+ පමණි (දැනට පවතින පරිදි)

.NET Core 2.0 අනුවාදයේ සිට මේ සම්බන්ධයෙන් කටයුතු කිරීමට ක්‍රම යුගලයක් ඇත:

  • String.Contains (Char, StringComparison )
  • String.Contains (String, StringComparison )

උදාහරණයක්:

"Test".Contains("test", System.StringComparison.CurrentCultureIgnoreCase);

කාලයාගේ ඇවෑමෙන්, ඔවුන් බොහෝ විට .NET ප්‍රමිතියට සහ එතැන් සිට මූලික පන්ති පුස්තකාලයේ අනෙකුත් සියලුම ක්‍රියාත්මක කිරීම් වලට පිවිසෙනු ඇත.



52

පිළිතුර සමඟ ඇති එක් ගැටළුවක් නම්, නූලක් ශුන්‍ය නම් එය ව්‍යතිරේකයක් විසි කරයි. ඔබට එය චෙක්පතක් ලෙස එකතු කළ හැකි බැවින් එය එසේ නොවේ:

public static bool Contains(this string source, string toCheck, StringComparison comp)
{
    if (string.IsNullOrEmpty(toCheck) || string.IsNullOrEmpty(source))
        return true;

    return source.IndexOf(toCheck, comp) >= 0;
} 

8
ToCheck යනු හිස් නූලක් නම් එය අඩංගු ලියකියවිලි අනුව සත්‍යය නැවත ලබා දිය යුතුය: "මෙම නූල තුළ අගය පරාමිතිය සිදුවන්නේ නම් සත්‍ය වේ, නැතහොත් අගය හිස් නූලක් නම් (" "); එසේ නොමැති නම් අසත්‍යය."
අමුරා

3
ඉහත අමූර්රාගේ අදහස මත පදනම්ව, යෝජිත කේතය නිවැරදි කිරීම අවශ්‍ය නොවේද? පිළිගත් පිළිතුරට මෙය එකතු කළ යුතු නොවේද, එවිට හොඳම ප්‍රතිචාරය පළමුව වේ.
ඩේවිඩ් වයිට්

13
චෙක්පත කුමක් වුවත් මූලාශ්‍රය හිස් නූලක් හෝ ශුන්‍ය නම් දැන් මෙය සත්‍ය වේ. එය නිවැරදි විය නොහැක. ToCheck හිස් නූලක් වන අතර ප්‍රභවය ශුන්‍ය නොවේ නම් IndexOf දැනටමත් සත්‍ය වේ. මෙහි අවශ්‍ය වන්නේ ශුන්‍යය සඳහා වන චෙක්පතකි. (මූලාශ්‍රය == ශුන්‍ය || අගය == ශූන්‍යය) වැරදි ලෙස ආපසු එවන්නේ නම් මම යෝජනා කරමි;
කොලින්

2
මූලාශ්‍රය ශුන්‍ය විය නොහැක
ලූකස්

1
if (string.IsNullOrEmpty(source)) return string.IsNullOrEmpty(toCheck);
කයිල් ඩෙලනි

35

StringExtension පන්තිය ඉදිරි මාවතයි, සම්පූර්ණ කේත උදාහරණයක් ලබා දීම සඳහා මම ඉහත ලිපි කිහිපයක් ඒකාබද්ධ කළෙමි:

public static class StringExtensions
{
    /// <summary>
    /// Allows case insensitive checks
    /// </summary>
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source.IndexOf(toCheck, comp) >= 0;
    }
}

ඔබ තවත් වියුක්ත ස්ථරයකට ඉඩ දෙන්නේ ඇයි StringComparison?
l --'''''--------- '' '' '' '' '' '

35

මෙය පිරිසිදු හා සරල ය.

Regex.IsMatch(file, fileNamestr, RegexOptions.IgnoreCase)

31
මෙය රටාවකට ගැලපේ. ඔබේ උදාහරණයේ, fileNamestrවිශේෂ රීජෙක්ස් අක්ෂර තිබේ නම් (උදා *.+ , ., ආදී) ඔබ ඉතා පුදුම සඳහා වනු ඇත. මෙම විසඳුම නිසි Containsකාර්යයක් ලෙස ක්‍රියාත්මක කිරීමට ඇති එකම ක්‍රමය වන්නේ එයින් fileNamestrගැලවීමයි Regex.Escape(fileNamestr).
XåpplI'-I0llwlg'I -

ඊට අමතරව, රීජෙක්ස් විග්‍රහ කිරීම හා ගැලපීම සරල සිද්ධි-සංවේදී නොවන සංසන්දනයකට වඩා සම්පත්දායකය
phuclv

29

OrdinalIgnoreCase, CurrentCultureIgnoreCase හෝ InvariantCultureIgnoreCase?

මෙය අස්ථානගත වී ඇති හෙයින්, කුමන ඒවා භාවිතා කළ යුතුද යන්න පිළිබඳ නිර්දේශ කිහිපයක් මෙන්න:

ඩොස්

  • භාවිත StringComparison.OrdinalIgnoreCaseසංස්කෘතික-අ nost ෙයවාදී නූල් ගැලපීම සඳහා ඔබගේ ආරක්ෂිත පෙරනිමිය ලෙස සැසඳීම් සඳහා .
  • StringComparison.OrdinalIgnoreCaseවැඩි වේගය සඳහා සැසඳීම් භාවිතා කරන්න .
  • භාවිත StringComparison.CurrentCulture-basedප්‍රතිදානය පරිශීලකයාට පෙන්වන විට සංගීත මෙහෙයුම් .
  • භාෂාමය නොවන StringComparison.Ordinalහෝ StringComparison.OrdinalIgnoreCaseසංසන්දනය කරන විට භාවිතා කිරීම සඳහා ආක්‍රමණික සංස්කෘතිය මත පදනම් වූ නූල් මෙහෙයුම් වල වර්තමාන භාවිතය මාරු කරන්න
    භාෂාමය වශයෙන් අදාළ නොවන විට (සංකේතාත්මක, උදාහරණයක් ලෙස).
  • භාවිතා ToUpperInvariantකරනවාට වඩා ToLowerInvariantසැසඳීම් සඳහා විට සාමාන්ය අගයකට නූල්.

නොකළ යුතු දේ

  • නූල් සංසන්දනය කිරීමේ යාන්ත්‍රණය පැහැදිලිව හෝ ව්‍යංගයෙන් නිශ්චිතව දක්වා නැති නූල් මෙහෙයුම් සඳහා අධි බර භාවිතා කරන්න.
  • බොහෝ අවස්ථාවන්හි StringComparison.InvariantCultureපාදක නූල්
    මෙහෙයුම් භාවිතා කරන්න ; ව්යතිරේක කිහිපයෙන් එකක් වන්නේ
    භාෂාමය අර්ථවත් නමුත් සංස්කෘතික-අ nost ෙයවාදී දත්ත දිගටම පැවතීමයි.

මෙම නීති මත පදනම්ව ඔබ භාවිතා කළ යුත්තේ:

string title = "STRING";
if (title.IndexOf("string", 0, StringComparison.[YourDecision]) != -1)
{
    // The string exists in the original
}

[YourDecision] රඳා පවතින්නේ ඉහළින් ඇති නිර්දේශ මත ය.

මූලාශ්‍රයේ සබැඳිය: http://msdn.microsoft.com/en-us/library/ms973919.aspx


ඔබ දන්නවා නම් ඔබ සැමවිටම ඉංග්‍රීසි නූලක් ලබා ගනීවි. කුමන එකක් භාවිතා කළ යුතුද?
BKSpurgeon

1
KBKSpurgeon මම ඕර්ඩිනල් ඉග්නෝර් කේස් භාවිතා කරමි, නඩුව වැදගත් නොවේ නම්
ෆේබියන් බිග්ලර්

20

මේවා පහසුම විසඳුම් වේ.

  1. දර්ශකය අනුව

    string title = "STRING";
    
    if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
    {
        // contains 
    }
  2. නඩුව වෙනස් කිරීමෙන්

    string title = "STRING";
    
    bool contains = title.ToLower().Contains("string")
  3. රීජෙක්ස් විසිනි

    Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);

11

මෙය C # නොවන බව මම දනිමි, නමුත් රාමුව තුළ (VB.NET) දැනටමත් එවැනි ශ්‍රිතයක් ඇත

Dim str As String = "UPPERlower"
Dim b As Boolean = InStr(str, "UpperLower")

සී # ප්‍රභේදය:

string myString = "Hello World";
bool contains = Microsoft.VisualBasic.Strings.InStr(myString, "world");

11

මෙම InStrඔබ ජාත්යන්තරකරණය (හෝ ඔබ එය reimplement හැකි) ගැන සැලකිල්ලක් නම් VisualBasic සිට ක්රමය එකලස් හොඳම වේ. එය දෙස බලන විට dotNeetPeek පෙන්නුම් කරන්නේ එය තොප්පි සහ සිම්පල් සඳහා පමණක් නොව, කනා වර්ගය සහ සම්පූර්ණ එදිරිව අර්ධ-පළල අක්ෂර සඳහාද (බොහෝ දුරට ආසියානු භාෂාවන්ට අදාළ වන නමුත් රෝම හෝඩියේ සම්පූර්ණ පළල අනුවාදයන් ඇතත්) ). මම සමහර විස්තර මඟ හැරියෙමි, නමුත් පුද්ගලික ක්‍රමය බලන්න InternalInStrText:

private static int InternalInStrText(int lStartPos, string sSrc, string sFind)
{
  int num = sSrc == null ? 0 : sSrc.Length;
  if (lStartPos > num || num == 0)
    return -1;
  if (sFind == null || sFind.Length == 0)
    return lStartPos;
  else
    return Utils.GetCultureInfo().CompareInfo.IndexOf(sSrc, sFind, lStartPos, CompareOptions.IgnoreCase | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth);
}

11

මේ වගේ:

string s="AbcdEf";
if(s.ToLower().Contains("def"))
{
    Console.WriteLine("yes");
}

3
මෙය සංස්කෘතියට විශේෂිත නොවන අතර සමහර අවස්ථාවල අසමත් විය හැකිය. culture.CompareInfo.IndexOf (ඡේදය, වචනය, CompareOptions.IgnoreCase) භාවිතා කළ යුතුය.
හිකල්කන්


8

මෙය භාවිතා කරන්න:

string.Compare("string", "STRING", new System.Globalization.CultureInfo("en-US"), System.Globalization.CompareOptions.IgnoreCase);

26
ප්‍රශ්න කරන්නා සොයන්නේ Containsනැත Compare.
DuckMaestro

Uck ඩක්මාස්ට්‍රෝ, පිළිගත් පිළිතුර ක්‍රියාත්මක Containsවේ IndexOf. එබැවින් මෙම ප්රවේශය සමානවම ප්රයෝජනවත් වේ! මෙම පිටුවේ ඇති C # කේත උදාහරණය string.Compare () භාවිතා කරයි. ෂෙයාර්පොයින්ට් කණ්ඩායමේ තේරීම එයයි!
වුල්කන් කපුටන්

6

මෙය මෙහි ඇති අනෙක් උදාහරණයට බෙහෙවින් සමාන ය, නමුත් වෙනත් විකල්ප සාමාන්‍යයෙන් අවශ්‍ය නොවන නිසා ප්‍රාථමිකව එනුම් බූල් කිරීමට සරල කිරීමට මම තීරණය කර ඇත්තෙමි. මෙන්න මගේ උදාහරණය:

public static class StringExtensions
{
    public static bool Contains(this string source, string toCheck, bool bCaseInsensitive )
    {
        return source.IndexOf(toCheck, bCaseInsensitive ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal) >= 0;
    }
}

භාවිතය වැනි දෙයක්:

if( "main String substring".Contains("SUBSTRING", true) )
....

6

RegEx භාවිතා කිරීම මෙය කිරීමට සෘජු ක්‍රමයකි:

Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);

4
ඔබේ පිළිතුර හරියටම guptat59 ට සමාන නමුත් ඔහුගේ පිළිතුරෙහි පෙන්වා ඇති පරිදි මෙය සාමාන්‍ය ප්‍රකාශනයකට ගැලපේ, එබැවින් ඔබ පරීක්ෂා කරන නූලෙහි විශේෂ රීජෙක්ස් අක්ෂර තිබේ නම් එය අපේක්ෂිත ප්‍රති .ලය ලබා නොදෙනු ඇත.
කේසි

2
මෙය මෙම පිළිතුරේ සෘජු පිටපතක් වන අතර එම පිළිතුරේ සඳහන් කර ඇති ගැටළු
ලියම්

එකඟ විය. නිත්‍ය ප්‍රකාශන අධ්‍යයනය කරන්න
ජරෙඩ්

5

මෙහි ඇති පිළිතුර මත ගොඩනැඟීම සඳහා, මෙය තව ටිකක් පරිශීලක-හිතකාමී බවට පත් කිරීම සඳහා ඔබට නූල් දිගු කිරීමේ ක්‍රමයක් නිර්මාණය කළ හැකිය:

    public static bool ContainsIgnoreCase(this string paragraph, string word)
    {
        return CultureInfo.CurrentCulture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0;
    }

1
ඔබේ ඡේදය සහ වචනය සැමවිටම එන්-එක්සත් ජනපදයේ පවතිනු ඇතැයි උපකල්පනය කිරීම
බොරිස් කැලන්ස්

3
එක්සත් ජනපදයට සංස්කෘතියට බල කිරීම සම්බන්ධ ගැටළු වළක්වා ගැනීමට, return CultureInfo.CurrentCulture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0;ඒ වෙනුවට භාවිතා කරන්න.
ඇන්ඩ rew වලන්


3

ඔබේ සම්මත නූල් නූල් වලින් තිබේදැයි පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම් ඒ සඳහා සරල ක්‍රමයක් ඇත.

string yourStringForCheck= "abc";
string stringInWhichWeCheck= "Test abc abc";

bool isContained = stringInWhichWeCheck.ToLower().IndexOf(yourStringForCheck.ToLower()) > -1;

මෙම බූලියන් අගය නූල් අඩංගුද නැද්ද යන්න නැවත ලබා දෙනු ඇත




2

මෙහි ඇති උපක්‍රමය නම් නඩුව නොසලකා හැරීම, නමුත් එය හරියටම එකම ලෙස තබා ගැනීමයි (එකම නඩුව සමඟ).

 var s="Factory Reset";
 var txt="reset";
 int first = s.IndexOf(txt, StringComparison.InvariantCultureIgnoreCase) + txt.Length;
 var subString = s.Substring(first - txt.Length, txt.Length);

ප්‍රතිදානය "යළි පිහිටුවීම"


-1
public static class StringExtension
{
    #region Public Methods

    public static bool ExContains(this string fullText, string value)
    {
        return ExIndexOf(fullText, value) > -1;
    }

    public static bool ExEquals(this string text, string textToCompare)
    {
        return text.Equals(textToCompare, StringComparison.OrdinalIgnoreCase);
    }

    public static bool ExHasAllEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index]) == false) return false;
        return true;
    }

    public static bool ExHasEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index])) return true;
        return false;
    }

    public static bool ExHasNoEquals(this string text, params string[] textArgs)
    {
        return ExHasEquals(text, textArgs) == false;
    }

    public static bool ExHasNotAllEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index])) return false;
        return true;
    }

    /// <summary>
    /// Reports the zero-based index of the first occurrence of the specified string
    /// in the current System.String object using StringComparison.InvariantCultureIgnoreCase.
    /// A parameter specifies the type of search to use for the specified string.
    /// </summary>
    /// <param name="fullText">
    /// The string to search inside.
    /// </param>
    /// <param name="value">
    /// The string to seek.
    /// </param>
    /// <returns>
    /// The index position of the value parameter if that string is found, or -1 if it
    /// is not. If value is System.String.Empty, the return value is 0.
    /// </returns>
    /// <exception cref="ArgumentNullException">
    /// fullText or value is null.
    /// </exception>
    public static int ExIndexOf(this string fullText, string value)
    {
        return fullText.IndexOf(value, StringComparison.OrdinalIgnoreCase);
    }

    public static bool ExNotEquals(this string text, string textToCompare)
    {
        return ExEquals(text, textToCompare) == false;
    }

    #endregion Public Methods
}

-4

නවක වදය සඳහා සරල ක්‍රමය:

title.ToLower().Contains("string");//of course "string" is lowercase.

වැරදියි කියා පහත් කොට සලකන්න. මාතෘකාව = StRiNg නම් කුමක් කළ යුතුද? StRiNg! = String සහ StRiNg! = STRING
berniefitz

මම වැරදියි. පිළිතුර පහත පරිදි සංස්කරණය කරන්න, ඉතා සරල ය: <br/> title.ToLower () අඩංගු වේ ("string") // ඇත්ත වශයෙන්ම "string" යනු කුඩා
අකුරකි
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.