比较两个NSStrings

时间:2011-08-06 21:45:03

标签: cocoa-touch nsstring string-comparison

在我的应用程序中,有一种机制要求在某个时刻,两个NSString将是相同的做某事;出于某种原因,当我比较两者时,即使它们是相同的,它仍然无法识别。代码是这样的:

NSString * aString = [self someMethodThatGetsAString];

NSString * bString;

BOOL areStringsTheSame = NO;

while (areStringsTheSame != YES) {

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

我甚至插入了一个NSLog()并确保它们在某一点上是相同的(据我所知这是==代表的......),但它仍然没有不要进入if来更改BOOL值。

还有其他方法可以进行这种比较吗?我错过了什么吗?

3 个答案:

答案 0 :(得分:76)

您可以使用方法isEqualToString:

if ([bString isEqualToString:aString])

==比较字符串的引用(地址),而不是字符串的值。

答案 1 :(得分:4)

最近,我感到震惊的是,在NSLog上彼此相似的两个NSStrings可能会有所不同。这是因为有时NSString可以包含零宽度空格字符。请注意并考虑:

#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]]];
        }
    }

答案 2 :(得分:4)

这种方法对我有用:

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