2010-07-11 6 views
2

대소 문자를 구별하는 NSString과 다른 문자열을 비교하는 가장 좋은 방법은 무엇입니까? 문자열 중 하나 인 경우 메서드는 YES를 반환하고 그렇지 않으면 NO를 반환해야합니다.대문자와 비 ASCII 문자열 비교

BOOL isContainedIn(NSArray* bunchOfStrings, NSString* stringToCheck) 
{ 
    for (NSString* string in bunchOfStrings) { 
     if ([string caseInsensitiveCompare:stringToCheck] == NSOrderedSame) 
      return YES; 
    } 
    return NO; 
} 

이 크게 다른 사용 사례에 맞게 최적화 할 수 물론 :

답변

10

여기에 약간의 도우미 함수입니다.

예를 들어, 당신은 일정한 bunchOfStrings에 대한 검사를 많이하면 containsObject: 문자열의 소문자 버전을 유지하기 위해 NSSet을 사용하고 사용할 수 있도록, 경우

BOOL isContainedIn(NSSet* bunchOfLowercaseStrings, NSString* stringToCheck) 
{ 
    return [bunchOfLowercaseStrings containsObject:[stringToCheck lowercaseString]]; 
} 
+0

감사합니다. 특히 caseInsensitiveCompare와 같은 것을 찾고있었습니다. –

2

그냥에 몇 가지 추가 사항을 추가 니콜라이의 대답 : 당신이 012를 호출하는 경우

NSOrderedSame 그래서 0

typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending}; 

으로 정의된다 nil 개체에을 입력하면 nil이 표시됩니다. 그렇다면 nilNSOrderSame (0)과 비교하면 당연히 잘못된 결과를 얻을 수 있습니다.

caseInsensitiveCompare:에 전달 된 매개 변수가 0이 아니어야하는지 확인해야합니다. documentation :

이 값은 nil이 아니어야합니다. 이 값이 nil 인 경우 동작은 정의되지 않은 것이며 이며 향후 OS X에서는 변경 될 수 있습니다.

관련 문제