Как сравнить две строки без учета регистра? - PullRequest
6 голосов
/ 23 февраля 2011

У меня есть 2 строковых объекта, содержащих одну и ту же строку, но регистр отличается, теперь я хочу сравнить их, игнорируя чувствительность к регистру, как это сделать? Вот код ...

#import <Foundation/Foundation.h>
void main()  
{  
    NSString *myString1 = @"mphasis";  
    NSString *myString2 = @"MPHASIS";
    if ([myString1 caseInsenstiveCompare:myString2])  
    {  
        NSLog (@"ITS EQUAL");  
    }  
    else  
    {   
        NSLog (@"ITS NOT EQUAL");  
    }  
}  

Ответы [ 5 ]

34 голосов
/ 23 февраля 2011

Если вы посмотрите caseInsensitiveCompare: в документах , вы увидите, что он возвращает NSComparisonResult, а не BOOL.Посмотрите на в документах , и вы увидите, что вы, вероятно, хотите, чтобы это был NSOrderedSame.Так что

if ([myString1 caseInsensitiveCompare:myString2] == NSOrderedSame)

должно сработать.Или просто сравните строчные буквы, как предложил Роберт.

7 голосов
/ 23 февраля 2011

Просто используйте lowercaseString для обеих строк, а затем сравните их, как если бы вы использовали обычную проверку на равенство строк. Это все равно будет O (n), так что ничего страшного.

4 голосов
/ 30 июля 2015

Я бы скорее предложил добавить категорию на NSString:

- (BOOL)isEqualIgnoreCaseToString:(NSString *)iString {
    return ([self caseInsensitiveCompare:iString] == NSOrderedSame);
}

С этим вы можете просто позвонить:

[myString1 isEqualIgnoreCaseToString:myString2];
1 голос
/ 27 января 2017

Простой, конвертируйте обе строки в одном и том же регистре. Вот я конвертирую его в нижний регистр, а затем проверяю.

if ([[myString1 lowercaseString] [myString2 lowercaseString]])
{
 // same
}
1 голос
/ 12 августа 2015

Чтобы сохранить вызов метода, я использовал макрос через #define:

#define isEqualIgnoreCaseToString(string1, string2) ([string1 caseInsensitiveCompare:string2] == NSOrderedSame)

Затем позвоните:

(BOOL) option = isEqualIgnoreCaseToString(compareString, toString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...