उद्देश्य सी में असंवेदनशील तुलना के मामले में क्या कोई मुझे किसी भी संसाधन की ओर इशारा कर सकता है? यह करने के लिए एक समकक्ष विधि है प्रतीत नहीं होता हैstr1.equalsIgnoreCase(str2)
उद्देश्य सी में असंवेदनशील तुलना के मामले में क्या कोई मुझे किसी भी संसाधन की ओर इशारा कर सकता है? यह करने के लिए एक समकक्ष विधि है प्रतीत नहीं होता हैstr1.equalsIgnoreCase(str2)
जवाबों:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
प्रलेखन खोज और तुलना के तरीकों पर स्थित है
NSString
एक बूलियन देता है। फिर यदि प्राप्त करने वाला स्ट्रिंग है nil
, तो विधि पूरे रिटर्न के रूप में है NO
।
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
}
यदि आप असंवेदनशीलता से अधिक नियंत्रण चाहते हैं तो एक विकल्प है:
[someString compare:otherString options:NSCaseInsensitiveSearch];
न्यूमेरिक सर्च और डिसक्रिटिकल असंवेदनशीलता दो आसान विकल्प हैं।
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
आप हमेशा तुलना से पहले एक ही मामले में सुनिश्चित कर सकते हैं:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
मुख्य लाभ आप शून्य स्ट्रिंग्स की तुलना के बारे में मैट द्वारा वर्णित संभावित मुद्दे से बचते हैं। आप compare:options:
विधियों में से किसी एक को करने से पहले स्ट्रिंग की जांच नहीं कर सकते हैं, या आप आलसी (मेरे जैसे) हो सकते हैं और प्रत्येक तुलना के लिए एक नया स्ट्रिंग बनाने की अतिरिक्त लागत को अनदेखा कर सकते हैं (जो कि न्यूनतम है यदि आप केवल एक कर रहे हैं या दो तुलना)।
caseInsensitiveCompare
), हमेशा उस का उपयोग करें।
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
ऐसा करने का एक नया तरीका। iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
true
"कैफे" और "," के लिए वापस आता है , तो यह निश्चित रूप से सही उत्तर नहीं है।
गंभीर रूप से आलसी के लिए स्विफ्ट को जेसन कोको के उत्तर को परिवर्तित करना :)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
iPhone के रूप में उपसर्ग के साथ संपर्क करने के लिए संपर्क करें
([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)
यह ब्लॉग मेरे लिए उपयोगी था
MacOS पर आप बस उपयोग कर सकते हैं -[NSString isCaseInsensitiveLike:]
, जो BOOL
ठीक उसी तरह लौटता है -isEqual:
।
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
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];
}
@"Some String"
किसी अन्य कॉल से प्राप्त और होने वाला हैnil
, अपनेif
दे देंगेtrue
भेजने के रूप मेंcaseInsensitiveCompare
करने के लिएnil
वैध किसी अन्य रूप में परिणाम है औरnil
जो, हमारे मामले में, तुलना के साथNSOrderedSame
वापस आ जाएगीtrue
(NSOrderedSame
0 के रूप में परिभाषित किया गया है)। यह काफी विनाशकारी कीड़े का स्रोत हो सकता है, जैसा कि मेरे मामले में था। चीयर्स!