질문자 :Jonathan.
NSString
)에 다른 작은 문자열이 포함되어 있는지 어떻게 확인할 수 있습니까?
나는 다음과 같은 것을 기대했습니다.
NSString *string = @"hello bla bla"; NSLog(@"%d",[string containsSubstring:@"hello"]);
그러나 내가 찾을 수있는 가장 가까운 것은 다음과 같습니다.
if ([string rangeOfString:@"hello"] == 0) { NSLog(@"sub string doesnt exist"); } else { NSLog(@"exists"); }
어쨌든 문자열에 다른 문자열이 포함되어 있는지 찾는 가장 좋은 방법은 무엇입니까?
NSString *string = @"hello bla bla"; if ([string rangeOfString:@"bla"].location == NSNotFound) { NSLog(@"string does not contain bla"); } else { NSLog(@"string contains bla!"); }
핵심은 rangeOfString:
이 NSRange
구조체를 반환하고 "haystack"에 "needle"이 포함되어 있지 않으면 {NSNotFound, 0}
반환한다고 문서에 나와 있습니다.
iOS 8 또는 OS X Yosemite를 사용하는 경우 이제 다음을 수행할 수 있습니다. (*참고: iOS7 기기에서 이 코드를 호출하면 앱이 충돌합니다).
NSString *string = @"hello bla blah"; if ([string containsString:@"bla"]) { NSLog(@"string contains bla!"); } else { NSLog(@"string does not contain bla"); }
(이것은 Swift에서도 작동하는 방식입니다)
Dave DeLongiOS 8.0+ 및 macOS 10.10+의 경우 NSString의 기본 containsString:
사용할 수 있습니다.
이전 버전의 iOS 및 macOS의 경우 NSString에 대해 고유한(구식) 카테고리를 만들 수 있습니다.
@interface NSString ( SubstringSearch ) - (BOOL)containsString:(NSString *)substring; @end // - - - - @implementation NSString ( SubstringSearch ) - (BOOL)containsString:(NSString *)substring { NSRange range = [self rangeOfString : substring]; BOOL found = ( range.location != NSNotFound ); return found; } @end
참고: 이름 지정에 대한 아래 Daniel Galasko의 설명을 참조하세요.
P i이것은 Google에서 높은 순위의 결과로 보이기 때문에 다음을 추가하고 싶습니다.
iOS 8 및 OS X 10.10 NSString
containsString:
메소드를 추가합니다. 해당 시스템에 대한 Dave DeLong의 예의 업데이트된 버전:
NSString *string = @"hello bla bla"; if ([string containsString:@"bla"]) { NSLog(@"string contains bla!"); } else { NSLog(@"string does not contain bla"); }
LukasNSString *myString = @"hello bla bla"; NSRange rangeValue = [myString rangeOfString:@"hello" options:NSCaseInsensitiveSearch]; if (rangeValue.length > 0) { NSLog(@"string contains hello"); } else { NSLog(@"string does not contain hello!"); }
//또는 다음을 사용할 수도 있습니다.
if (rangeValue.location == NSNotFound) { NSLog(@"string does not contain hello"); } else { NSLog(@"string contains hello!"); }
AJSiOS 8 및 Swift localizedCaseInsensitiveContainsString
메서드를 사용할 수 있습니다.
let string: NSString = "Café" let substring: NSString = "É" string.localizedCaseInsensitiveContainsString(substring) // true
Govind그래서 개인적으로 NSNotFound
정말 싫어하지만 그 필요성을 이해합니다.
그러나 일부 사람들은 NSNotFound와 비교하는 복잡성을 이해하지 못할 수 있습니다.
예를 들어 이 코드는 다음과 같습니다.
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { if([string rangeOfString:otherString].location != NSNotFound) return YES; else return NO; }
다음과 같은 문제가 있습니다.
1) 분명히 otherString = nil
이면 이 코드는 충돌합니다. 간단한 테스트는 다음과 같습니다.
NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO");
결과 !! 크래시 !!
2) objective-c를 처음 접하는 사람에게 그렇게 분명하지 않은 것은 string = nil
때 동일한 코드가 충돌하지 않는다는 것입니다. 예를 들어 이 코드는 다음과 같습니다.
NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO");
그리고 이 코드:
NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO");
둘 다
does string contains string - YES
분명히 당신이 원하는 것이 아닙니다.
따라서 내가 생각하기에 더 나은 솔루션은 rangeOfString이 0의 길이를 반환한다는 사실을 사용하는 것이므로 더 안정적인 코드는 다음과 같습니다.
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { if(otherString && [string rangeOfString:otherString].length) return YES; else return NO; }
또는 간단히:
- (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { return (otherString && [string rangeOfString:otherString].length); }
케이스 1과 2의 경우 반환됩니다.
does string contains string - NO
그것은 내 2 센트입니다 ;-)
더 유용한 코드를 보려면 내 Gist 를 확인하세요.
ucangetitNSString의 범주인 Pi 's 솔루션 의 개선된 버전은 문자열이 다른 문자열 내에서 발견되는지 여부를 알려줄 뿐만 아니라 참조로 범위를 취하는 경우 다음과 같습니다.
@interface NSString (Contains) -(BOOL)containsString: (NSString*)substring atRange:(NSRange*)range; -(BOOL)containsString:(NSString *)substring; @end @implementation NSString (Contains) -(BOOL)containsString:(NSString *)substring atRange:(NSRange *)range{ NSRange r = [self rangeOfString : substring]; BOOL found = ( r.location != NSNotFound ); if (range != NULL) *range = r; return found; } -(BOOL)containsString:(NSString *)substring { return [self containsString:substring atRange:NULL]; } @end
다음과 같이 사용하십시오.
NSString *string = @"Hello, World!"; //If you only want to ensure a string contains a certain substring if ([string containsString:@"ello" atRange:NULL]) { NSLog(@"YES"); } // Or simply if ([string containsString:@"ello"]) { NSLog(@"YES"); } //If you also want to know substring's range NSRange range; if ([string containsString:@"ello" atRange:&range]) { NSLog(@"%@", NSStringFromRange(range)); }
vikingosegundo다음은 복사하여 붙여넣기 기능 스니펫입니다.
-(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText { return [StrText rangeOfString:StrSearchTerm options:NSCaseInsensitiveSearch].location != NSNotFound; }
Durai Amuthan.HOneliner (더 적은 양의 코드. NSLog
가 하나만 있으므로 DRY):
NSString *string = @"hello bla bla"; NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla");
jerikNSString *categoryString = @"Holiday Event"; if([categoryString rangeOfString:@"Holiday"].location == NSNotFound) { //categoryString does not contains Holiday } else { //categoryString contains Holiday }
Ada이 시도,
NSString *string = @"test Data"; if ([[string lowercaseString] rangeOfString:@"data"].location == NSNotFound) { NSLog(@"string does not contain Data"); } else { NSLog(@"string contains data!"); }
Pooja Patel최고의 솔루션. 이렇게 간단합니다! 문자열의 단어 또는 일부를 찾으려면. 이 코드를 사용할 수 있습니다. 이 예에서는 word 값에 "acter"가 포함되어 있는지 확인합니다.
NSString *word =@"find a word or character here"; if ([word containsString:@"acter"]){ NSLog(@"It contains acter"); } else { NSLog (@"It does not contain acter"); }
handiansom스위프트 4:
let a = "Hello, how are you?" a.contains("Hello") //will return true
garg이것이 한 번 필요하면 다음을 작성하십시오.
NSString *stringToSearchThrough = @"-rangeOfString method finds and returns the range of the first occurrence of a given string within the receiver."; BOOL contains = [stringToSearchThrough rangeOfString:@"occurence of a given string"].location != NSNotFound;
Nikolay Shubenkov스위프트의 경우 사용할 수 있습니다.
let string = "Package #23" if string.containsString("Package #") { //String contains substring } else { //String does not contain substring }
Sreedeepkesav M S대소문자를 구분하는 문자열을 신경쓰지 않는다면. 이것을 한 번 시도하십시오.
NSString *string = @"Hello World!"; if([string rangeOfString:@"hello" options:NSCaseInsensitiveSearch].location !=NSNotFound) { NSLog(@"found"); } else { NSLog(@"not found"); }
Abhijit이 코드를 사용하십시오
NSString *string = @"hello bla bla"; if ([string rangeOfString:@"bla"].location == NSNotFound) { NSLog(@"string does not contain bla"); } else { NSLog(@"string contains bla!"); }
Rohit suvagiyarangeOfString:options와 함께 NSCaseInsensitiveSearch 옵션을 사용합니다.
NSString *me = @"toBe" ; NSString *target = @"abcdetobe" ; NSRange range = [target rangeOfString: me options: NSCaseInsensitiveSearch]; NSLog(@"found: %@", (range.location != NSNotFound) ? @"Yes" : @"No"); if (range.location != NSNotFound) { // your code }
출력 결과를 찾았습니다:예
옵션은 함께 "또는"될 수 있으며 다음을 포함합니다.
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch 등
Nayab Muhammad첫 번째 문자열에는 두 번째 문자열이 포함되거나 포함되지 않습니다.
NSString *first = @"Banana"; NSString *second = @"BananaMilk"; NSRange range = [first rangeOfString:second options:NSCaseInsensitiveSearch]; if (range.length > 0) { NSLog(@"Detected"); } else { NSLog(@"Not detected"); }
Kamani Jasmin이 시도:
스위프트 4.1, 4.2:
let stringData = "Black board" //swift quick way and case sensitive if stringData.contains("bla") { print("data contains string"); } //case sensitive if stringData.range(of: "bla",options: .caseInsensitive) != nil { print("data contains string"); }else { print("data does not contains string"); }
Objective-C의 경우:
NSString *stringData = @"Black board"; //Quick way and case sensitive if ([stringData containsString:@"bla"]) { NSLog(@"data contains string"); } //Case Insensitive if ([stringData rangeOfString:@"bla" options:NSCaseInsensitiveSearch].location != NSNotFound) { NSLog(@"data contains string"); }else { NSLog(@"data does not contain string"); }
Amir.n3t스위프트 4 이상
let str = "Hello iam midhun" if str.contains("iam") { //contains substring } else { //doesn't contain substring }
오브젝티브-C
NSString *stringData = @"Hello iam midhun"; if ([stringData containsString:@"iam"]) { //contains substring } else { //doesn't contain substring }
midhun p-(Bool)checkIf:(String)parentString containsSubstring:(String)checkString { NSRange textRange =[parentString rangeOfString:checkString]; return textRange.location != NSNotFound // returns true if parent string contains substring else returns false }
iOS Nepal문자열의 특정 위치가 필요한 경우 이 코드는 Swift 3.0 에 배치됩니다.
let string = "This is my string" let substring = "my" let position = string.range(of: substring)?.lowerBound
pedrouan출처 : http:www.stackoverflow.com/questions/2753956/how-do-i-check-if-a-string-contains-another-string-in-objective-c