c# - কেস অসংবেদক 'রয়েছে(স্ট্রিং)'




string contains (16)

.NET কোর 2.0+ শুধুমাত্র (এখন পর্যন্ত)

সংস্করণ 2.0 এর পরে এটির সাথে মোকাবিলা করার জন্য .NET কোরের এক জোড়া পদ্ধতি রয়েছে:

  • স্ট্রিং। কনটেইনেস (চার, স্ট্রিং কম্পোরিসন )
  • স্ট্রিং। কনটেন্টস (স্ট্রিং, স্ট্রিং কম্পোরিসন )

উদাহরণ:

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

সময়ের সাথে সাথে, তারা সম্ভবত নেট নেটওয়ার্কে এবং বাইশ ক্লাস লাইব্রেরির অন্যান্য সমস্ত বাস্তবায়নে তাদের পথ তৈরি করবে।

নিম্নলিখিত ফেরত সত্য করার একটি উপায় আছে?

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

এমন একটি ওভারলোড বলে মনে হচ্ছে না যা আমাকে কেস সেন্সিটিভিটি সেট করতে দেয় .. বর্তমানে আমি তাদের উভয়কে অপেক্ষায় রাখি, কিন্তু এটি কেবল বোকা (যার মাধ্যমে আমি i18n বিষয়গুলি উল্লেখ করছি যা আপ এবং ডাউন ক্যাসিং সহ আসে)।

হালনাগাদ
এই প্রশ্নটি প্রাচীন এবং তারপরে আমি বুঝতে পেরেছি যে আপনি যদি সত্যিই সম্পূর্ণ তদন্ত করতে চান তবে সত্যিই একটি বিশাল উত্তর এবং কঠিন বিষয়টির জন্য আমি একটি সরল উত্তর চাই।
বেশিরভাগ ক্ষেত্রেই, মনো-ভাষাগত, ইংরাজী কোডের ভিত্তি this উত্তরটি যথেষ্ট হবে। আমি এখানে আসছি কারণ এখানে আসছে বেশিরভাগ লোক এই বিভাগে পড়ে এই সবচেয়ে জনপ্রিয় উত্তর।
This উত্তরটি অবশ্যম্ভাবী সমস্যাটি তুলে ধরে যে আমরা পাঠ্যের ক্ষেত্রে অসংবেদনশীলতার তুলনা করতে পারব না যতক্ষণ না আমরা জানি উভয় গ্রন্থ একই সংস্কৃতি এবং আমরা সে সংস্কৃতিটি জানি। এটি সম্ভবত একটি কম জনপ্রিয় উত্তর, তবে আমি মনে করি এটি আরো সঠিক এবং তাই আমি এটির মতো চিহ্নিত করেছি।


Regex ব্যবহার করে বিকল্প সমাধান:

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

বিজ্ঞপ্তি

যেমন @ সিএওও তার মন্তব্যে উল্লেখ করেছেন, সেখানে এমন পরিস্থিতি রয়েছে যা এই সমাধানটিকে ভুল ফলাফলগুলি ফেরত দিতে পারে। আপনি এই সমাধানটি অযৌক্তিকভাবে প্রয়োগ করার আগে আপনি কী করছেন তা নিশ্চিত করুন।


আপনার যদি আন্তর্জাতিককরণের বিষয়ে উদ্বেগ থাকে (অথবা আপনি এটি পুনরায় সম্পাদন করতে পারেন) তাহলে ভিসুয়াল ব্যাসিক সমাবেশ থেকে InStr পদ্ধতিটি সর্বোত্তম। এটিতে ডটনিয়েপিক দেখায় যে এটি শুধুমাত্র ক্যাপ এবং ছোট হাতের অক্ষরগুলির জন্য নয়, কান টাইপ এবং পূর্ণ-বনাম অর্ধ-প্রস্থ অক্ষরগুলির জন্য (বেশিরভাগই এশিয়ান ভাষার জন্য প্রাসঙ্গিক, যদিও রোমান বর্ণমালার সম্পূর্ণ প্রস্থ সংস্করণগুলিও আছে) )। আমি কিছু বিস্তারিত বাদ দিচ্ছি, কিন্তু ব্যক্তিগত পদ্ধতিটি 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);
}

আপনি 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);

আপনি string.indexof () ফাংশন ব্যবহার করতে পারেন। এই ক্ষেত্রে সংবেদনশীল হবে


আপনি সবসময় স্ট্রিং প্রথম আপ বা ডাউনসেস করতে পারে।

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

ওহ, শুধু শেষ বিট দেখেছি। একটি কেস অসামঞ্জস্যপূর্ণ তুলনা * সম্ভবত * যাইহোক, একইভাবে করবেন, এবং কর্মক্ষমতা একটি সমস্যা না হয়, আমি বড় হাতের কপি তৈরি এবং তাদের তুলনা সঙ্গে একটি সমস্যা দেখতে না। আমি একবার শপথ করতে পারতাম যে একবার আমি একটি কেস-অসংবেদী তুলনা দেখেছি ...


উত্তরের সাথে এক সমস্যা হল স্ট্রিং নাল থাকলে এটি একটি ব্যতিক্রম নিক্ষেপ করবে। আপনি একটি চেক হিসাবে যে যোগ করতে পারেন তাই এটি করবে না:

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;
} 

এই সবচেয়ে সহজ সমাধান।

  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 দ্বারা

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

এখানে কৌতুক স্ট্রিংটি সন্ধান করা, কেসটি উপেক্ষা করা, তবে এটি একইভাবে রাখা (একই ক্ষেত্রে)।

 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);

আউটপুট "রিসেট" হয়


এটা ব্যবহার কর:

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

এটি পরিষ্কার এবং সহজ।

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

ঠিক এই রকম:

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

স্ট্রিং paragraph স্ট্রিং word রয়েছে কিনা তা পরীক্ষা করার জন্য (ধন্যবাদ @QuarterMister)

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

culture উদাহরণ যেখানে টেক্সটটি লেখা হয় তার বর্ণনা।

এই সমাধান ক্ষেত্রে সংবেদনশীলতা সংজ্ঞা সম্পর্কে স্বচ্ছ , যা ভাষা নির্ভরশীল । উদাহরণস্বরূপ, নবম অক্ষরের উপরের এবং নিম্ন ক্ষেত্রে সংস্করণগুলির জন্য ইংরেজি ভাষাটি অক্ষরটি i এবং i ব্যবহার করে, যখন তুর্কি ভাষাটি ২9 অক্ষরের লম্বা বর্ণমালার 11 ম এবং বারোটি অক্ষরগুলির জন্য এই অক্ষরগুলি ব্যবহার করে। 'I' এর তুর্কি উচ্চতর সংস্করণটি অপরিচিত অক্ষর 'İ'।

সুতরাং স্ট্রিং tin এবং TIN একই শব্দ ইংরেজি , কিন্তু তুর্কি মধ্যে বিভিন্ন শব্দ। আমি বুঝতে পেরেছি, এক অর্থ 'আত্মা' এবং অন্যটি একটি অ্যানোমেটোপিয়া শব্দ। (তুর্ক, অনুগ্রহ করে আমাকে ভুল করুন, অথবা ভালো উদাহরণ দেওয়ার পরামর্শ দিন)

সংক্ষেপে বলতে গেলে, আপনি কেবল এই প্রশ্নের উত্তর দিতে পারেন যে এই দুটি স্ট্রিংগুলি একই রকম কিন্তু বিভিন্ন ক্ষেত্রে ' যদি আপনি জানেন যে পাঠ্য কোন ভাষাতে রয়েছে । আপনি যদি না জানেন, আপনি একটি প্যান্ট নিতে হবে। সফ্টওয়্যারে ইংরেজির আধিপত্য দেওয়া হলে, সম্ভবত আপনি CultureInfo.InvariantCulture অবলম্বন করুন, কারণ এটি পরিচিত পদ্ধতিতে ভুল হবে।


স্ট্রিং এক্সটেনশান ক্লাসটি এগিয়ে যাওয়ার উপায়, আমি উপরের কোডের একটি সম্পূর্ণ উদাহরণ দেওয়ার জন্য উপরে কয়েকটি পোস্ট সংযুক্ত করেছি:

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;
    }
}

OrdinalIgnoreCase, CurrentCultureIgnoreCase বা InvariantCultureIgnoreCase?

যেহেতু এটি অনুপস্থিত, সেগুলি কখন ব্যবহার করবেন সে সম্পর্কে কিছু প্রস্তাবনা এখানে রয়েছে:

করণীয়

  • সংস্কৃতি-অ্যাগনস্টিক স্ট্রিং মিলিংয়ের জন্য আপনার নিরাপদ ডিফল্ট হিসাবে তুলনা করার জন্য StringComparison.OrdinalIgnoreCase ব্যবহার করুন।
  • বর্ধিত গতির জন্য StringComparison.OrdinalIgnoreCase তুলনা তুলনা করুন।
  • ব্যবহারকারীর আউটপুট প্রদর্শন করার সময় StringComparison.CurrentCulture-based স্ট্রিং ক্রিয়াকলাপ ব্যবহার করুন।
  • অ-ভাষাগত StringComparison.Ordinal ব্যবহার করার জন্য StringComparison.Ordinal সংস্কৃতির উপর ভিত্তি করে স্ট্রিং ক্রিয়াকলাপগুলির বর্তমান ব্যবহারটি স্যুইচ করুন। তুলনামূলকভাবে যখন StringComparison.OrdinalIgnoreCase
    ভাষাগতভাবে অপ্রাসঙ্গিক (উদাহরণস্বরূপ, প্রতীকী)।
  • তুলনার জন্য স্ট্রিং স্বাভাবিক করার সময় ToUpperInvariant পরিবর্তে ToUpperInvariant ব্যবহার করুন।

কী করা উচিত না

  • স্ট্রিং অপারেশনগুলির জন্য ওভারলোড ব্যবহার করুন যা স্পষ্টভাবে বা নিখুঁতভাবে স্ট্রিং তুলনা প্রক্রিয়া নির্দিষ্ট করে না।
  • StringComparison.InvariantCulture ব্যবহার করুন StringComparison.InvariantCulture ভিত্তিক স্ট্রিং
    অধিকাংশ ক্ষেত্রে অপারেশন; কয়েক ব্যতিক্রম এক হতে হবে
    ভাষাগতভাবে অর্থপূর্ণ কিন্তু সাংস্কৃতিকভাবে অজ্ঞাত তথ্য।

এই নিয়ম উপর ভিত্তি করে আপনি ব্যবহার করা উচিত:

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


if ("strcmpstring1".IndexOf(Convert.ToString("strcmpstring2"), StringComparison.CurrentCultureIgnoreCase) >= 0){return true;}else{return false;}




case-insensitive