누구나 Objective C에서 대소 문자를 구분하지 않는 비교에 대한 리소스를 알려 줄 수 있습니까? 에 상응하는 방법이없는 것 같습니다str1.equalsIgnoreCase(str2)
누구나 Objective C에서 대소 문자를 구분하지 않는 비교에 대한 리소스를 알려 줄 수 있습니까? 에 상응하는 방법이없는 것 같습니다str1.equalsIgnoreCase(str2)
답변:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
설명서는 검색 및 비교 방법에 있습니다.
NSString
은 부울을 반환하는 범주 내부의 메소드로 해당 비교를 구현하는 것 입니다. 그런 다음 수신 문자열이 nil
이면 메서드가 전체적으로 반환 NO
됩니다.
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
참고 : stringA &&
은 ( stringA
는) nil
다음과 같은 이유로 필요합니다 .
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
그래서 어떻게 NSOrderedSame
또한으로 정의된다 0
.
다음은 일반적인 함정입니다.
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
// what happens if "Rank" is not found in standardUserDefaults
}
대소 문자를 구분하지 않는 것보다 더 많은 제어를 원하는 경우의 대안은 다음과 같습니다.
[someString compare:otherString options:NSCaseInsensitiveSearch];
숫자 검색과 분음 부호는 두 가지 편리한 옵션입니다.
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
비교하기 전에 항상 같은 경우인지 확인할 수 있습니다.
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
nil 문자열 비교와 관련하여 matm이 설명 할 수있는 잠재적 인 문제를 피하는 것이 주된 이점입니다. compare:options:
메소드 중 하나를 수행하기 전에 문자열이 0이 아닌지 확인 하거나 나처럼 게으르고 각 비교에 대해 새 문자열을 작성하는 추가 비용을 무시할 수 있습니다 (하나만 수행하는 경우 최소 임) 또는 두 가지 비교).
caseInsensitiveCompare
항상 사용하십시오.
이를위한 새로운 방법. iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
true
이 "Café"및 "É"로 돌아 오면 이것이 정답 이 아닙니다 .
심하게 게으른 제이슨 코코의 답변을 스위프트 로 변환 :)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
맥 OS에서 당신은 간단하게 사용할 수 있습니다 -[NSString isCaseInsensitiveLike:]
반환하는 BOOL
것처럼 -isEqual:
.
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
NSMutableArray *arrSearchData;
NSArray *data=[arrNearByData objectAtIndex:i];
NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]];
NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch];
if(r.location != NSNotFound)
{
[arrSearchData addObject:data];
}
@"Some String"
다른 전화에서 수신 될 일이있다nil
, 당신이if
줄 것이다true
전송로caseInsensitiveCompare
에nil
유효하며 다른 결과nil
우리의 경우와 비교하는NSOrderedSame
반환합니다true
(NSOrderedSame
0으로 정의된다). 이것은 내 경우와 마찬가지로 매우 파괴적인 버그의 원천이 될 수 있습니다. 건배!