比较两个nsstring



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

NSString * aString = [self someMethodThatGetsAString];
NSString * bString;
BOOL areStringsTheSame = NO;
while (areStringsTheSame != YES) {
       bString = [self someMethodThatTakesNSStringsFromAnArrey];
       if (bString == aString) {
             areStringsTheSame = YES;
       { }

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

有没有别的方法来做这个比较?我错过什么了吗?

可以使用方法isEqualToString::

if ([bString isEqualToString:aString])

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

这个方法对我很有效:

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

最近我被一个事实震惊了,两个NSLog上看起来很相似的nsstring可能是不同的。这是因为有时候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]]];
        }
    }

最新更新