Bir dize Objective-C-də başqa bir dize ehtiva edirmi?

Bir simli ( NSString ) başqa kiçik bir simli var mı yoxlamaq üçün necə?

Kimi bir şeyə ümid edirdim:

 NSString *string = @"hello bla bla"; NSLog(@"%d",[string containsSubstring:@"hello"]); 

Amma ən yaxşısını tapa bildim:

 if ([string rangeOfString:@"hello"] == 0) { NSLog(@"sub string doesnt exist"); } else { NSLog(@"exists"); } 

Hər halda, simli başqa bir simli var mı?

1096
Jonathan tərəfindən verilmişdir . 2010-05-02 18:34 02 May '10 saat 18:34 'da 2010-05-02 18:34
@ 1 cavab
 NSString *string = @"hello bla bla"; if ([string rangeOfString:@"bla"].location == NSNotFound) { NSLog(@"string does not contain bla"); } else { NSLog(@"string contains bla!"); } 

Açar qeydlər ki, rangeOfString: bir NSRange strukturunu qaytarır və sənədlərdə "saman" bir "iynə" içermiyorsa bir struct {NSNotFound, 0} .


Əgər siz iOS 8 və ya OS X Yosemite'da olursanız, indi edə bilərsiniz: (* Qeyd: Bu, tətbiqinizin iOS7 cihazında çağırıldığı halda çökməyə səbəb olacaq).

 NSString *string = @"hello bla blah"; if ([string containsString:@"bla"]) { NSLog(@"string contains bla!"); } else { NSLog(@"string does not contain bla"); } 

👍

2316
02 мая '10 в 19:20 2010-05-02 19:20 Cavab Deyv DeLong tərəfindən mayın 02-də saat 19: 20-da verilir. 2010-05-02 19:20

Qeyd. Bu cavabı artıq köhnəlmişdir.

NSString üçün bir kateqoriya yaradın:

border=0
 @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 

EDIT: Daniel Qalaskonun adı ilə bağlı aşağıdakı şərhinə baxın

151
09 июля '11 в 5:40 2011-07-09 05:40 Cavab P i 09 iyul 'da 5:40' də verilir. 2011-07-09 05:40

Bu, Google-da yüksək rütbəli bir nəticə kimi görünsə də, bunu əlavə etmək istəyirəm:

iOS 8 və OS X 10.10 metodunu containsString: NSString containsString: NSString . Bu sistemlər üçün Dave DeLong nümunəsinin yenilənmiş bir versiyası:

 NSString *string = @"hello bla bla"; if ([string containsString:@"bla"]) { NSLog(@"string contains bla!"); } else { NSLog(@"string does not contain bla"); } 
44
09 июня '14 в 0:14 2014-06-09 00:14 Cavab Lukas 09 iyun 2014-cü ildə 0:14 2014-06-09 00:14 tarixində verilir
 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!"); } 

// Aşağıdakılardan istifadə edə bilərsiniz:

 if (rangeValue.location == NSNotFound) { NSLog(@"string does not contain hello"); } else { NSLog(@"string contains hello!"); } 
35
27 июня '12 в 15:40 2012-06-27 15:40 Cavab AJS tərəfindən 27 İyun 2012 günü saat 15: 40-da verilir. 2012-06-27 15:40

İOS 8 və Swift ilə, localizedCaseInsensitiveContainsString metodundan istifadə edə bilərik

  let string: NSString = "Café" let substring: NSString = "É" string.localizedCaseInsensitiveContainsString(substring) // true 
21
25 июня '14 в 11:53 2014-06-25 11:53 cavab iGo tərəfindən 25 iyun 'da 11:53' də verilir. 2014-06-25 11:53

Şəxsən mən NSNotFound nifrət NSNotFound , amma onun zəruriliyini başa düşürəm.

Ancaq bəzi insanlar NSNotFound ilə müqayisə etmə çətinliklərini anlamırlar

Məsələn, bu kod:

 - (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { if([string rangeOfString:otherString].location != NSNotFound) return YES; else return NO; } 

öz problemləri var:

1) Şübhəsiz ki, əgər otherString = nil , bu kod işləyəcək. sadə test:

 NSLog(@"does string contain string - %@", [self doesString:@"hey" containString:nil] ? @"YES": @"NO"); 

səbəb olur! Cırıq!

2) obyektiv yeni birinə nə qədər aydın görünmürsə, c eyni kodun string = nil olduqda string = nil . Məsələn, bu kod:

 NSLog(@"does string contain string - %@", [self doesString:nil containString:@"hey"] ? @"YES": @"NO"); 

və bu kod:

 NSLog(@"does string contain string - %@", [self doesString:nil containString:nil] ? @"YES": @"NO"); 

Hər iki nəticəyə də səbəb olacaq

 does string contains string - YES 

Bu, nə istədiyinizi aydın deyil.

Beləliklə, mən inanıram ki, ən yaxşı həlli, istifadə üçündür ki, rangeOfString 0 uzunluğunu qaytarır, belə ki, kod daha etibarlıdır:

 - (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { if(otherString  [string rangeOfString:otherString].length) return YES; else return NO; } 

YA DA JUST:

 - (BOOL)doesString:(NSString*)string containString:(NSString*)otherString { return (otherString  [string rangeOfString:otherString].length); } 

1-ci və 2-ci hallarda qayıdacaqlar

 does string contains string - NO 

Mənim 2 sentim nədir; -)

Daha faydalı kod üçün Gist'i oxuyun.

12
06 авг. Cavab verilir ucangetit 06 aug. 2015-08-06 09:36 '15 at 9:36 am 2015-08-06 09:36

P-i həllinin təkmilləşdirilmiş bir versiyası, NSString-də bir sətirdir, bu simli başqa simada tapılmadığını deyil, həm də referansta bir sıra qəbul edir:

 @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 

Kimi istifadə edin:

 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 range NSRange range; if ([string containsString:@"ello" atRange: { NSLog(@"%@", NSStringFromRange(range)); } 
11
30 янв. Vikingosegundo tərəfindən verilmiş cavab Jan 30 2013-01-30 02:48 '13 da 2:48 2013-01-30 02:48

Kopyalama ve yapıştırma funksiyasının bir parçası:

 -(BOOL)Contains:(NSString *)StrSearchTerm on:(NSString *)StrText { return [StrText rangeOfString:StrSearchTerm options:NSCaseInsensitiveSearch].location != NSNotFound; } 
8
29 авг. cavab Durai Amuthan.H 29 aug. 2013-08-29 18:07 '13 at 18:07 2013-08-29 18:07

Oneliner (daha az DRY kodu, yalnız bir NSLog olduğundan):

 NSString *string = @"hello bla bla"; NSLog(@"String %@", ([string rangeOfString:@"bla"].location == NSNotFound) ? @"not found" : @"cotains bla"); 
6
30 янв. jerik tərəfindən verilmiş cavabı Jan 30 2013-01-30 02:21 '13 at 2:21 2013-01-30 02:21
 NSString *categoryString = @"Holiday Event"; if([categoryString rangeOfString:@"Holiday"].location == NSNotFound) { //categoryString does not contains Holiday } else { //categoryString contains Holiday } 
5
08 июля '15 в 13:44 2015-07-08 13:44 cavab Ada iyul ayının 08-də saat 01:44 da verilir

cəhd edin,

4
02 сент. Cavab Pooja Patel tərəfindən verildi 02 Sep. 2015-09-02 12:48 '15 at 12:48 2015-09-02 12:48

Tez istifadə edildikdə istifadə edilə bilər.

 let string = "Package #23" if string.containsString("Package #") { //String contains substring } else { //String does not contain substring } 
3
24 февр. Cavab verildi 24 fevral fevralı kesav. 2016-02-24 11:35 '16 'da 11:35' də 2016-02-24 11:35 'da

Buna ehtiyac varsa, yaz:

 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; 
3
24 апр. Cavab Nikolay Şubenkov tərəfindən verilir 24 apr. 2015-04-24 17:00 '15 saat 17.00 'də

Ən yaxşı həll. Necə sadədir! Bir söz və ya simli bir hissəsini tapmaq istəyirsinizsə. Bu kodu istifadə edə bilərsiniz. Bu nümunədə biz "aktyor" sözünün dəyərini yoxlayacağıq.

 NSString *word =@"find a word or character here"; if ([word containsString:@"acter"]){ NSLog(@"It contains acter"); } else { NSLog (@"It does not contain acter"); } 
3
22 авг. handiansom tərəfindən verilmiş cavab 22 avqu . 2016-08-22 09:05 '16 saat 09:05 'da 2016-08-22 09:05

Əgər bir halda həssas simli narahat olmayın. Bir dəfə cəhd edin.

 NSString *string = @"Hello World!"; if([string rangeOfString:@"hello" options:NSCaseInsensitiveSearch].location !=NSNotFound) { NSLog(@"found"); } else { NSLog(@"not found"); } 
2
08 июня '15 в 8:48 2015-06-08 08:48 cavab 08 iyun 'da saat 08:48' də Abihid tərəfindən verilir
 NSString *colorKey = @"I am feeling BLUE"; if ([colorKey rangeOfString:@"blue" options:NSCaseInsensitiveSearch].location != NSNotFound) { NSLog(@"found the blue"); } 
1
03 дек. Cavab Rohit Kashyap 03 dekabrda verilir. 2017-12-03 06:15 '17 saat 06:15 'da 2017-12-03 06:15

Swift 4-də

a = "Salam, necəsən?"

a.contains ("Hello") // true

1
12 окт. Cavab 12 oktyabrda Ankit garq tərəfindən verilir . 2017-10-12 21:47 '17 da 21:47 2017-10-12 21:47

Xahiş edirik bu kodu istifadə edin.

1
01 авг. Cavab Rohit suvagiya 01 aug. 2015-08-01 09:01 '15 at 09:01 AM 2015-08-01 09:01

Müəyyən bir xətt mövqeyi tələb olunursa, bu kod Swift 3.0-da yerləşdirilir:

 let string = "This is my string" let substring = "my" let position = string.range(of: substring)?.lowerBound 
-2
04 сент. Cavab pedrouan 04 sep verilir . 2016-09-04 18:29 '16 saat 06:29 'da 2016-09-04 18:29

bağlı digər suallar və ya sual verin