Сравните две строки NSStrings - PullRequest
20 голосов
/ 07 августа 2011

В моем приложении есть механизм, который требует, чтобы в определенный момент два 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 ]

78 голосов
/ 07 августа 2011

Вы можете использовать метод isEqualToString: :

if ([bString isEqualToString:aString])

== сравнивает ссылки (адреса) строк, а не значение строк.

5 голосов
/ 20 мая 2014

Этот подход работал для меня:

if ([firstString compare:secondString] == NSOrderedSame) {
    //Do something when they are the same
} else {
    //Do something when they are different
}
4 голосов
/ 07 сентября 2012

Недавно я был шокирован тем фактом, что две строки NSS, которые похожи друг на друга в NSLog, могут отличаться. Это потому, что иногда 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]]];
        }
    }
...