उद्देश्य-सी में स्ट्रिंग तुलना


92

मुझे वर्तमान में एक वेबसर्वर सेट मिला है जिसे मैं अपने iPhone ऐप के साथ SOAP पर संवाद करता हूं। मैं एक GUID युक्त स्ट्रिंग लौटा रहा हूं और जब मैं दूसरे स्ट्रिंग के साथ इसकी तुलना करने का प्रयास करता हूं तो मुझे कुछ अजीब परिणाम मिलते हैं।

यह आग क्यों नहीं लगेगी? निश्चित रूप से दो तार एक मैच हैं?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;

1
यह सवाल अब ज्यादातर बेकार है क्योंकि स्क्रीनशॉट गायब हो गया है। यही कारण है कि कोड को सवालों में कॉपी-पेस्ट किया जाना चाहिए।
jscs

स्क्रीनशॉट मुझे लगता है कि त्रुटि थी, लेकिन जवाब 2 साल पहले की तरह दिया गया था!
इंधाम

1
लेकिन कोई भी भविष्य पाठक उस त्रुटि या कोड को नहीं देख सकता है जिसे आप यह जानने के लिए उपयोग कर रहे थे कि क्या यह उनके समान है, जिसका अर्थ है कि यह प्रश्न किसी और की मदद नहीं कर सकता है।
jscs

मैं छवि की तलाश करूंगा। मुझे लगता है कि यह अन्य प्रश्नों के लिए एक संदर्भ आधार की तरह है, लेकिन अब इसे बंद करना थोड़ा व्यर्थ है।
इंध

2
यह सवाल बंद क्यों है? यह पूरी तरह से वैध सवाल है!
ibz

जवाबों:


213

-isEqualToString:दो तारों के मूल्य की तुलना करने के लिए विधि का उपयोग करें । सी ==ऑपरेटर का उपयोग करने से केवल वस्तुओं के पते की तुलना होगी।

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}

2
आह! आपको बहुत धन्यवाद। इस पर एक मूर्ख की तरह लग रहा है!
इंध।

3
मेरा अनुमान है कि ObjectiveC ++ में आप एक ऑपरेटर को अधिभार बना सकते हैं जो आपको उपयोग करने के लिए वाक्य-रचना-शर्करा क्षमता प्रदान कर सकता है।
वॉरेन पी

48

आप केस-संवेदी या केस-असंवेदनशील तुलना का उपयोग कर सकते हैं, जो आपको आवश्यक है। केस-संवेदी इस तरह है:

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

केस-असंवेदनशील इस तरह है:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}

1
मुझे लगता है कि यह होना चाहिए: ([श्रेणी तुलना: @ "कुछ स्ट्रिंग" विकल्प: NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL

9
"तुलना" फ़ंक्शन के साथ सावधान रहें क्योंकि यदि स्ट्रिंग (इस मामले में "श्रेणी") शून्य है, तो तुलना हमेशा NSOrderedSame लौटाएगी।
nh32rg

यह एक महान बिंदु @ nh32rg है !! उस के लिए +1! क्या IsEqualToString में यही समस्या है?
21

5

आप नीचे दिए गए कार्यों के साथ स्ट्रिंग की तुलना कर सकते हैं।

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.