কেস সংবেদনশীল তুলনা এনএসএসস্ট্রিং


240

উদ্দেশ্যমূলক সি-তে কেস কে সংবেদনশীল তুলনা সম্পর্কে যে কোনও সংস্থান সম্পর্কে আমাকে নির্দেশ করতে পারে? এটির সমতুল্য পদ্ধতি আছে বলে মনে হয় নাstr1.equalsIgnoreCase(str2)

উত্তর:


564
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
  // strings are equal except for possibly case
}

ডকুমেন্টেশন অনুসন্ধান এবং তুলনা পদ্ধতিতে অবস্থিত


152
এটা তোলে মূল্য উল্লেখ করে মামলায় যখন @"Some String"অন্য কোন কল থেকে পেয়েছি এবং হতে হবে হয় nil, আপনার ifদেব trueপাঠিয়ে caseInsensitiveCompareকরার nilবৈধ অন্য ফলাফল নেই এবং nilযা আমাদের ক্ষেত্রে তুলনা সঙ্গে NSOrderedSameফিরে আসবে true( NSOrderedSame0 হিসাবে সংজ্ঞায়িত করা হয়)। এটি বেশ বিধ্বংসী বাগের উত্স হতে পারে, যেমনটি আমার ক্ষেত্রে ছিল। চিয়ার্স!
ম্যাটম

10
এর জন্য আমার কাজটি হ'ল কোনও তুলনামূলকভাবে NSStringকোনও বুলিয়ান ফেরত দেয় এমন কোনও বিভাগের অভ্যন্তরীণ পদ্ধতি হিসাবে সেই তুলনাটি প্রয়োগ করা । তারপর প্রাপ্তির স্ট্রিং হলে nil, একটি সম্পূর্ণ রিটার্ন যেমন পদ্ধতি NO
13:38

50
 NSString *stringA;
 NSString *stringB;

 if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
     // match
 }

নোট: stringA && কারণ যখন প্রয়োজন বোধ করা হয় stringAহয় nil:

 stringA = nil;
 [stringA caseInsensitiveCompare:stringB] // return 0

এবং তাই ঘটে NSOrderedSameহিসাবে সংজ্ঞায়িত করা হয়0

নিম্নলিখিত উদাহরণটি একটি সাধারণ ক্ষতি:

 NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
 if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
     // what happens if "Rank" is not found in standardUserDefaults
 }

46

আপনি যদি কেবল সংবেদনশীলতার চেয়ে বেশি নিয়ন্ত্রণ চান তবে একটি বিকল্প হ'ল:

[someString compare:otherString options:NSCaseInsensitiveSearch];

সংখ্যার অনুসন্ধান এবং ডায়াক্রিটিক্যাল সংবেদনশীলতা দুটি সহজ বিকল্প y


4
যেমন ম্যাথাম দ্বারা উপরে উল্লিখিত হয়েছে, যদি কিছু স্ট্রিং শূন্য থাকে তবে এটি সত্য হবে।
nh32rg

@ nh32rg আপনি কি কেবলমাত্র মিথ্যা পজিটিভের জন্য আপত্তি জানাতে পারবেন, যদি-বিবৃতিটিকে এমন কিছুতে পরিবর্তন করে থাকেনif ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
কিংপলিগন

1
আসলে, আপনার লিখতে হবে [... কোমাপ্রেই: ...] == 0, কারণ দুটি স্ট্রিং একই থাকলে রিটার্ন এনএসর্ডারসাম (= 0) তুলনা করুন। এর জন্য, কিছু স্ট্রিং! = (আইডি) [এনএস নাল নাল], আমি এটির প্রয়োজন বলে মনে করি না, কারণ যদি নাল হয় তবে দৈর্ঘ্য শূন্য হয়। আমি সাধারণত এটির সাথে তুলনা করি: যদি (কিছু স্ট্রিং.লেন্থ> 0 && [সামান্য স্ট্রিং তুলনা করুন: অরথারস্ট্রিং বিকল্পসমূহ: এনএসকেস ইনটেনসিটিভ অনুসন্ধান] == 0)
কোয়ান

23

আপনি তুলনা করার আগে সর্বদা একই পরিস্থিতিতে ছিলেন তা নিশ্চিত করতে পারতেন:

if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
    // They're equal
}

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


3
তুলনা করার জন্য কেসিংয়ের হেরফের করা সাধারণত বুদ্ধিমানের কাজ নয় (উদাহরণস্বরূপ, টার্কি পরীক্ষা: moserware.com/2008/02/does-your-code-pass-turkey-test.html )। আপনার যখন ভাষা-সমর্থিত কেস তুলনা থাকে (যেমন caseInsensitiveCompare), সর্বদা এটি ব্যবহার করুন।
ওহাদ স্নাইডার

7
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString

12
উত্তরের কিছু প্রসঙ্গ এবং বর্ণনা থাকলে এটি মানুষের পক্ষে অনেক বেশি কার্যকর।
jowie

7

এটি করার একটি নতুন উপায়। আইওএস 8

let string: NSString = "Café"
let substring: NSString = "É"

string.localizedCaseInsensitiveContainsString(substring) // true

অবজেক্ট সংস্করণ: যদি (স্ট্রিং অ্যান্ড অ্যান্ড [স্ট্রিং স্থানীয়করণকৃত
সংবেদনশীল কনটেনস

ওপি "কেস সংবেদনশীল তুলনা" চেয়েছে । তাহলে আপনার সমাধান আয় true"ক্যাফে" এবং "E" জন্য, এই স্পষ্টভাবে হয় না একটি সঠিক উত্তর।
আলেকজান্ডার আবাকুমভ

6

এই পদ্ধতিটি ব্যবহার করে দেখুন

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString

6

জেসন কোকোর জবাবটি অলসতার জন্য সুইফটে রূপান্তর করা :)

if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
  // Strings are equal.
}

1
যার প্রয়োজন যার জন্য XCodes স্বতঃপূরণ অস্বীকার করে! : ডি
নিতিন আলাবুর

5

আইফোন যোগাযোগ অ্যাপ্লিকেশন হিসাবে উপসর্গ সঙ্গে পরীক্ষা করতে

([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)

এই ব্লগটি আমার জন্য দরকারী ছিল


1

দ্রুতগতির জন্য বিকল্প সমাধান:

উভয় উচ্চশিক্ষার তৈরি করতে:

উদাহরণ:

if ("ABcd".uppercased() == "abcD".uppercased()){
}

বা উভয় লোয়ারকেস তৈরি করতে:

উদাহরণ:

if ("ABcd".lowercased() == "abcD".lowercased()){
}

0

ম্যাকোজে আপনি কেবল ব্যবহার করতে পারেন -[NSString isCaseInsensitiveLike:], যা BOOLঠিক মত ফিরে আসে -isEqual:

if ([@"Test" isCaseInsensitiveLike: @"test"])
    // Success

-3
NSMutableArray *arrSearchData;  
NSArray *data=[arrNearByData objectAtIndex:i];
NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]];
NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch];

if(r.location != NSNotFound)
{
     [arrSearchData addObject:data];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.