etc./StackOverFlow

Objective-C에서 문자열에 다른 문자열이 포함되어 있는지 어떻게 확인합니까?

청렴결백한 만능 재주꾼 2023. 4. 25. 10:55
반응형

질문자 :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 DeLong

iOS 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"); }

Lukas

NSString *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!"); }

AJS

iOS 8Swift 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 를 확인하세요.


ucangetit

NSString의 범주인 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.H

Oneliner (더 적은 양의 코드. NSLog 가 하나만 있으므로 DRY):

 NSString *string = @"hello bla bla"; NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla");

jerik

NSString *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 suvagiya

rangeOfString: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

반응형