2011-08-06 10 views
18

मेरे ऐप में एक तंत्र है जिसके लिए एक निश्चित बिंदु पर दो NSString एस कुछ करने के लिए समान होगा; किसी कारण से जब मैं दोनों की तुलना करता हूं, तब भी जब वे समान होते हैं, तब भी यह इसे पहचान नहीं पाता है। कोड कुछ इस तरह है:दो एनएसएसआरिंग्स की तुलना करें

NSString * aString = [self someMethodThatGetsAString]; 

NSString * bString; 

BOOL areStringsTheSame = NO; 

while (areStringsTheSame != YES) { 

     bString = [self someMethodThatTakesNSStringsFromAnArrey]; 
     if (bString == aString) { 
      areStringsTheSame = YES; 
     { } 

मैं भी एक NSLog() डाला जाता है और यह सुनिश्चित करें कि एक निश्चित बिंदु पर वे एक ही थे (और जहाँ तक मुझे पता है यह क्या == के लिए ... खड़ा है) बना दिया लेकिन अभी भी BOOL मान बदलने के लिए if में नहीं मिला था।

क्या इस तुलना को करने का कोई और तरीका है? क्या मैं कुछ भूल रहा हूँ?

if ([bString isEqualToString:aString]) 

== तुलना संदर्भ (के पते) तार, और न तार के मूल्य:

उत्तर

72

आप विधि isEqualToString: उपयोग कर सकते हैं।

+2

सच। और ओओपी के सिद्धांतों में खोदना (एक ही गुण के साथ दो वस्तुओं को एक ही वस्तु नहीं है)। अन्यथा, आपको अपने डेवलपर जीवन के हर दिन इस समस्या का सामना करना पड़ेगा :-) – vstrien

+0

स्पष्ट रूप से '==' स्ट्रिंग्स वैरिएबल का उपयोग करने के तरीके के कारण स्ट्रिंग केस-सेंसिटिव रूप से तुलना करने के लिए भी काम करता है। उदाहरण के लिए, एक स्ट्रिंग ए और स्ट्रिंग बी घोषित करें, और '==' करें और आप पाएंगे कि वे दोनों एक ही पते में संग्रहीत हैं। –

2

हाल ही में मैं इस तथ्य से चौंक गया था कि एनएसएलओजी पर एक-दूसरे के समान दो एनएसएसआरटी अलग-अलग हो सकते हैं। ऐसा इसलिए होता है क्योंकि कभी-कभी एनएसएसटींग में शून्य चौड़ाई स्पेस कैरेक्टर हो सकता है। इस बात का ध्यान रखें और विचार करें:

#define ZERO_WIDTH_SPACE_STRING @"\u200B" 

इस जीत के लिए आप की तुलना करने से पहले शून्य चौड़ाई सफेद स्थान वर्ण से अपने स्ट्रिंग साफ करना चाहिए:

NSMutableString *eMailToAdd = [NSMutableString string]; 

NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy]; 
    //[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 

    NSString *rawStr = [[tokenField textField] text]; 
    for (int i = 0; i < [rawStr length]; i++) 
    { 
     if (![charSet characterIsMember:[rawStr characterAtIndex:i]]) 
     { 
      [eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]]; 
     } 
    } 
3

यह दृष्टिकोण मेरे लिए काम किया:

if ([firstString compare:secondString] == NSOrderedSame) { 
    //Do something when they are the same 
} else { 
    //Do something when they are different 
}