কেস সংবেদনশীল 'অন্তর্ভুক্ত (স্ট্রিং)'


2907

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

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

এমন কোনও ওভারলোড বলে মনে হচ্ছে না যা আমাকে কেস সংবেদনশীলতা সেট করতে দেয় .. বর্তমানে আমি তাদের উভয়কেই ঠিক করে দিই, তবে এটি কেবল নির্বোধ (যার দ্বারা আমি আই 18n ইস্যুগুলিকে উল্লেখ করছি যা আপ- এবং ডাউন কেসিংয়ের সাথে আসে)।

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

উত্তর:


1396

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

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

পাঠ্যটি যে ভাষায় লেখা আছে তা বর্ণনা cultureকরার উদাহরণটি কোথায় CultureInfo

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

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

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


67
না কেন culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0? এটি সঠিক সংস্কৃতি ব্যবহার করে এবং কেস-সংবেদনশীল, এটি অস্থায়ী ছোট হাতের স্ট্রিং বরাদ্দ করে না এবং এটি ছোট হাতের অক্ষরে রূপান্তর করা এবং তুলনা করা সর্বদা কেস-সংবেদনশীল তুলনা হিসাবে একই কিনা তা এড়িয়ে চলে ids
কোয়ার্টারমিস্টার

9
এই সমাধানটি অকারণে অনুসন্ধানের কী কী ফাংশন হওয়া উচিত তার জন্য মেমরি বরাদ্দ করে গাদা দূষিত করে
জারেডপাড়

15
টোলওয়ারের সাথে তুলনা করা () দু'টি ভিন্ন বর্ণের একই ছোট হাতের অক্ষর থাকলে কেস-সংবেদনশীল সূচক থেকে আলাদা ফলাফল দেয়। উদাহরণস্বরূপ, ইউ + 0398 "গ্রীক ক্যাপিটাল লেটার থেটা" বা ইউ + 03 এফ 4 "গ্রীক ক্যাপিটাল লেটার থেটায় প্রতীক" তে টোলওয়ার () কে কল করার পরে ইউ +03 বি 8, "গ্রীক ছোট চিঠি থেইটা" ফলাফল আসে, তবে মূল অক্ষরগুলি আলাদা বলে বিবেচিত হয়। উভয় সমাধানই একই বড় বড় অক্ষরের সাথে ছোট হাতের অক্ষরগুলিকে আলাদা বলে বিবেচনা করে, যেমন ইউ + 0073 "ল্যাটিন ছোট চিঠি এস" এবং ইউ + 017F "ল্যাটিন ছোট চিঠি লং এস", সুতরাং সূচিপত্রটি আরও সুসংগত বলে মনে হয়।
কোয়ার্টারমিস্টার

3
@ কোয়ার্টারমিস্টার - এবং বিটিডাব্লু, আমি বিশ্বাস করি। নেট 2 এবং .NET4 .NET 4 সর্বদা NORM_LINGUISTIC_CASING ব্যবহার করে যখন। নেট 2 করেনি (উইন্ডোজ ভিস্তার সাথে এই পতাকাগুলি উপস্থিত হয়েছে)।
সাইমন মউরিয়ার

10
আপনি কেন "ddddfg" লেখেন নি? ইন্ডেক্সঅফ ("ডিএফ", স্ট্রিংকম্পিউশন.অর্ডিনালআইগনোর কেস)?
চেন

2712

আপনি স্ট্রিং.ইনডেক্স অফ পদ্ধতিটি ব্যবহার করতে এবং 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;
    }
}

দ্রষ্টব্য, পুরানো সংস্করণ ব্যবহারের জন্য নাল প্রচারটি ?. সি # 6.0 (ভিএস 2015) থেকে পাওয়া যায়

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

ব্যবহার:

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

3
দুর্দান্ত স্ট্রিং এক্সটেনশন পদ্ধতি! উত্সের স্ট্রিংটি যাচাই করার জন্য আমি আমার সম্পাদনা করেছি object
রিচার্ড পার্সহাউস

8
এটি এর paragraph.ToLower(culture).Contains(word.ToLower(culture))সাথে একই উত্তর দেয় CultureInfo.InvariantCultureএবং এটি কোনও স্থানীয়করণের সমস্যা সমাধান করে না। জটিল জিনিস কেন? stackoverflow.com/a/15464440/284795
কর্নেল আতঙ্ক

60
@ কলোনেলপ্যানিক ToLowerসংস্করণে 2 টি বরাদ্দ রয়েছে যা তুলনা / অনুসন্ধানের অপ্রয়োজনে অপ্রয়োজনীয়। অযথা কেন এমন দৃশ্যে বরাদ্দ দেওয়া হয় যা এর প্রয়োজন হয় না?
জেয়ার্ডপাড়

4
@Seabiscuit করবে না কাজ কারণ stringএকজন IEnumerable<char>অত: পর যদি আপনি এটি ব্যবহার করতে পারবেন না, সাবস্ট্রিং এটি
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 না থাকলে। মানটি স্ট্রিং.এম্পটি হলে, ফেরতের মান 0 হয়।


148

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

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

6
গুড আইডিয়া, এছাড়াও আমাদের রেগেক্সঅপশনগুলিতে অনেকগুলি বিটওয়াইস সংমিশ্রণ রয়েছে RegexOptions.IgnoreCase & RegexOptions.IgnorePatternWhitespace & RegexOptions.CultureInvariant;কারও পক্ষে যদি সহায়তা করে তবে।
সারাভানান

7
অবশ্যই বলতে হবে আমি এই পদ্ধতিটি পছন্দ করি যদিও স্বচ্ছতার জন্য ইসম্যাচ ব্যবহার করছি।
wonea

31
সবচেয়ে খারাপ বিষয়, যেহেতু অনুসন্ধানের স্ট্রিংটিকে একটি রেজেক্স হিসাবে ব্যাখ্যা করা হয়েছে, তাই বেশ কয়েকটি বিরামচিহ্নগুলি ভুল ফলাফলের কারণ ঘটায় (বা কোনও অবৈধ অভিব্যক্তির কারণে ব্যতিক্রমকে ট্রিগার করে)। অনুসন্ধান করে দেখুন "."মধ্যে "This is a sample string that doesn't contain the search string"। বা "(invalid"সেই বিষয়ে অনুসন্ধান করার চেষ্টা করুন ।
সিএওও

17
@ সিএইচও: সেক্ষেত্রে Regex.Escapeসাহায্য করতে পারে। IndexOf/ এক্সটেনশানটি Containsসহজ (এবং তত যুক্তিযুক্ত আরও স্পষ্ট) যখন রেজেক্স এখনও অপ্রয়োজনীয় বলে মনে হয়।
ড্যান মাঙ্গিয়ারেলি

6
নোট করুন যে আমি বোঝাচ্ছিলাম না যে এই রেজেক্স সমাধানটি সবচেয়ে ভাল উপায় ছিল। আমি কেবলমাত্র মূল পোস্ট করা প্রশ্নের উত্তরগুলির তালিকায় যুক্ত করেছিলাম "নিম্নলিখিত রিটার্নটি সত্য করার কোনও উপায় আছে?"
জেড

79

আপনি সর্বদা প্রথমে স্ট্রিংগুলি কেবল উপরে বা ডাউনসেস করতে পারেন।

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

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


122
"তুরস্ক পরীক্ষা" এর জন্য অনুসন্ধান করুন :)
জন স্কিটি

7
কিছু ফরাসী লোকালগুলিতে, বড় হাতের অক্ষরে ডায়াক্রিটিক্স থাকে না, তাই টুঅপার () টোএলভার () এর চেয়ে ভাল আর কিছু নাও হতে পারে। আমি বলব উপযুক্ত সরঞ্জামগুলি উপলভ্য থাকলে সেগুলি ব্যবহার করুন - কেস-সংবেদনশীল তুলনা।
ব্লেয়ার কনরাড

5
টুঅপার বা টোলওয়ার ব্যবহার করবেন না, এবং জন স্কিটি যা বলেছিলেন তা করুন
পিটার গফাদার

14
মাত্র দু'বছর পরে এটি আবার দেখেছি এবং একটি নতুন ডাউনওয়েট ... যাইহোক, আমি সম্মত হই যে স্ট্রিংগুলির তুলনা করার আরও ভাল উপায় রয়েছে। তবে, সমস্ত প্রোগ্রাম স্থানীয় করা হবে না (বেশিরভাগ হবে না) এবং অনেকগুলি অভ্যন্তরীণ বা নিক্ষিপ্ত অ্যাপ্লিকেশন। যেহেতু আমি থ্রোওয়ে অ্যাপ্লিকেশনের জন্য পরামর্শের ক্রেডিটটি খুব কমই আশা করতে পারি ... আমি এগিয়ে চলেছি: ডি
এড এস।

8
"তুরস্কি পরীক্ষা" অনুসন্ধান করা "টার্কি টেস্ট" সন্ধানের সমান?
জ্যাকআস

54

। নেট কোর 2.0+ (কেবল এখনকার হিসাবে)

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

  • স্ট্রিং.সামগ্রী (চর, স্ট্রিংকম্প্রেশন )
  • স্ট্রিং.কন্টেনস (স্ট্রিং, স্ট্রিংক্যাম্পেরেশন )

উদাহরণ:

"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
যদি টেক চেকটি খালি স্ট্রিং থাকে তবে এটি অন্তর্ভুক্ত ডকুমেন্টেশন অনুযায়ী সত্য হওয়া উচিত: "সত্য যদি মানটির প্যারামিটারটি এই স্ট্রিংয়ের মধ্যে দেখা দেয় বা মানটি খালি স্ট্রিং (" ") হয়; অন্যথায়, মিথ্যা।"
আমুররা

3
উপরের আমুরার মন্তব্যের ভিত্তিতে, প্রস্তাবিত কোডটি সংশোধন করার দরকার নেই? এবং এটি কি গ্রহণযোগ্য উত্তরে যুক্ত করা উচিত নয়, যাতে সেরা সাড়া প্রথম হয়?
ডেভিড হোয়াইট

13
সোর্সটি যদি খালি স্ট্রিং হয় বা টুক চেক যাই হোক না কেন এটি বাতিল হয়ে যায়। এটি সঠিক হতে পারে না। এছাড়াও সূচিপত্র যদি ইতিমধ্যে সত্য থেকে ফিরে আসে তবে যদি চেকটি একটি খালি স্ট্রিং হয় এবং উত্সটি শূন্য হয় না। এখানে যা দরকার তা হল নালার জন্য একটি চেক check আমি প্রস্তাব দিই যদি (উত্স == নাল || মান == নাল) মিথ্যা ফিরে আসে;
কলিন

2
উত্সটি নালাগুলি
লুকাস

1
if (string.IsNullOrEmpty(source)) return string.IsNullOrEmpty(toCheck);
কাইল ডেলাানি

35

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

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কোনো বিশেষ Regex অক্ষর আছে (যেমন *, +, ., ইত্যাদি) তারপর আপনি বেশ একটি আশ্চর্য জন্য হতে হবে। শুধুমাত্র একটি সঠিক মত এই সমাধান কাজ করতে উপায় Containsফাংশন অব্যাহতি হয় fileNamestrকরে Regex.Escape(fileNamestr)
XåpplI'-I0llwlg'I -

তদ্ব্যতীত, একটি রেজেক্সকে পার্সিং এবং মেলানো একটি সাধারণ কেস-সংবেদনশীল তুলনার তুলনায় অনেক বেশি সংস্থান-নিবিড়
ফুচলভি

29

অর্ডিনালআইগনোর কেস, কারেন্টকালচারআইগনোর কেস বা ইনভারেন্টাল কালচারআইগনোর কেস?

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

করণীয়

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

কী করা উচিত না

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

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

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

যদিও [আপনার সিদ্ধান্ত] উপরের সুপারিশগুলির উপর নির্ভর করে।

উত্সের লিঙ্ক: http://msdn.microsoft.com/en-us/library/ms973919.aspx


আপনি যদি জানেন যে আপনি সর্বদা একটি ইংরেজি স্ট্রিং পাবেন get কোনটি ব্যবহার করবেন?
বিকেএসপুরজন

1
@ বি কে এসপুরজেন আমি অর্ডিনালআইগনরেস কেসটি ব্যবহার করতাম, যদি কেসটি বিবেচনা না করে
ফ্যাবিয়ান

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

আমি জানি যে এটি সি # নয়, তবে ফ্রেমওয়ার্কে (ভিবি.এনইটি) ইতিমধ্যে এমন ফাংশন রয়েছে

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

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


8

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

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

26
প্রশ্নকর্তা খুঁজছেন Containsনা Compare
ডকমেস্টরো

@ ডাকমাস্ট্রো, স্বীকৃত উত্তরটি কার্যকর Containsকরছে IndexOf। সুতরাং এই পদ্ধতির সমানভাবে সহায়ক! এই পৃষ্ঠায় সি # কোড উদাহরণটি স্ট্রিং ব্যবহার করছে omp শেয়ারপয়েন্ট দলের পছন্দের!
ভলকান রেভেন 10

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
আপনার উত্তর হুবহু গুপ্তাট 59৯ এর মতো তবে তার উত্তরে যেমন উল্লেখ করা হয়েছিল, এটি একটি নিয়মিত অভিব্যক্তির সাথে মিলবে, সুতরাং আপনি যে স্ট্রিংটিতে পরীক্ষা করছেন তাতে যদি কোনও বিশেষ রেজেক্স অক্ষর থাকে তবে এটি পছন্দসই ফলাফল অর্জন করবে না।
কেসি

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;পরিবর্তে ব্যবহার করুন।
অ্যান্ড্রুওয়ালান

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
বার্নিফিট্জ

আমি ভৃল ছিলাম. উত্তরটি নিম্নরূপে সম্পাদনা করুন, খুব সাধারণ সরল: <br/> শিরোনাম oআপনি ("স্ট্রিং") // অবশ্যই "স্ট্রিং" ছোট হাতের অক্ষর
হে Thanh Ldt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.