Нечувствительное к регистру сравнение 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");
}