Нечувствительное к регистру сравнение NSString
Используя этот код, я могу сравнить строковые значения.
[elementName isEqualToString: @"Response"]
Но это сравнивает случай-чувствительно. Есть ли способ сравнить строку без чувствительности к регистру?
Ответы
Ответ 1
Theres a caseInsensitiveCompare:
метод на NSString
, почему вы не читаете документацию? Метод возвращает NSComparisonResult
:
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
... ах, извините, теперь я понял, что вы просите о равенстве, чувствительном к регистру. (Почему я не прочитал вопрос?:-) По умолчанию равенство isEqual:
или isEqualToString:
должно быть чувствительным к регистру, что дает?
Ответ 2
Здесь вам нужно сравнить строку, не заботясь о ее нижнем или верхнем регистре:
if ([elementName caseInsensitiveCompare:@"Response"]==NSOrderedSame)
{
// Your "elementName" variable IS "Response", "response", "reSPonse", etc
//
}
Ответ 3
Фактически isEqualToString: работает с чувствительной к регистру.
как:
[elementName isEqualToString: @"Response"];
если вы хотите запросить нечувствительность к регистру, то вот код:
Вы можете изменить как сопоставимую строку на lowerCase, так и в верхнем регистре, и можете сравнивать:
NSString *tempString = @"Response";
NSString *string1 = [elementName lowercaseString];
NSString *string2 = [tempString lowercaseString];
//The same code changes both strings in lowerCase.
//Now You Can compare
if([string1 isEqualToString:string2])
{
//Type your code here
}
Ответ 4
NSString *string1 = @"stringABC";
NSString *string2 = @"STRINGDEF";
NSComparisonResult result = [string1 caseInsensitiveCompare:string2];
if (result == NSOrderedAscending) {
NSLog(@"string1 comes before string2");
} else if (result == NSOrderedSame) {
NSLog(@"We're comparing the same string");
} else if (result == NSOrderedDescending) {
NSLog(@"string2 comes before string1");
}