2010-03-03 4 views
1

possible en double:
Number of occurrences of a substring in an NSString?NSString: nombre d'un mot

Je voudrais savoir s'il y a une méthode qui renvoie l'apparition d'un mot donné.


NSString *string = @"ok no ok no no no ok"; 
// How to return 4 for the word no ? 

Merci pour votre aide!

+2

double: http : //stackoverflow.com/questions/2166809/number-of-occurrences-of-a-substring-in-an-nsstring/2166955 – kennytm

+0

Il serait vraiment utile si vous pouviez être plus précis. Comment définissez-vous "mot"? Est-il suffisant de vérifier les caractères d'espace autour de la chaîne de recherche, ou devez-vous tenir compte de la ponctuation, d'autres langues, etc.? –

Répondre

5

cette API: - (NSArray *) componentsSeparatedByString: séparateur (NSString *)

NSString* stringToSearch = @"ok no ok no no no ok"; 
NSString* stringToFind = @"no"; 
NSArray *listItems = [list componentsSeparatedByString:stringToFind]; 
int count = [listItems count] - 1; 

Vous obtiendrez nombre d'occurences de chaîne @ "non" dans la variable "count"

+1

Brillante réponse, appréciée! –

1

peut ne pas être le moyen le plus rapide, mais vous pouvez utiliser la méthode NSString componentsSeparatedByString pour séparer vos valeurs dans un tableau, puis travailler avec ce tableau pour vérifier combien de fois la chaîne « non » est contenu ...

Sinon, le travail sur une chaîne C ptr, et la boucle, incrémenter la PTR, tout en utilisant strncmp() ou si ...

+2

Qu'y a-t-il entre vous et la bibliothèque de cordes C? ;) NSString est beaucoup plus simple à utiliser dans le contexte d'Obj-C. –

+1

lol;) À mon humble avis, cela dépend de ce que vous voulez atteindre, et si vous avez besoin de performances par rapport à la facilité d'utilisation ... – Macmade

+1

J'ai besoin de performance, ça doit être très rapide. – Pierre

2

Si vous écrivez une application 10.5+ seulement, vous devriez être en mesure d'utiliser stringByReplacingOccurrencesOfString:withString: de NSString méthode pour le faire avec un code assez minimal, en vérifiant la longueur avant et après la suppression de la chaîne que vous recherchez.

Exemple ci-dessous (non testé car je travaille sur 10.4, mais je ne vois pas pourquoi cela ne fonctionnerait pas.) Je ne ferais pas votre application 10.5+ juste juste pour l'utiliser cependant, beaucoup d'autres méthodes suggérées par Macmade et dans la question en double.

NSString* stringToSearch = @"ok no ok no no no ok"; 
NSString* stringToFind = @"no"; 

int lengthBefore, lengthAfter, count; 

lengthBefore = [stringToSearch length]; 
lengthAfter = [[stringToSearch stringByReplacingOccurrencesOfString:stringToFind withString:@""] length]; 
count = (lengthBefore - lengthAfter)/[stringToFind length]; 

NSLog(@"Found the word %i times", count); 
2

Vous souhaitez utiliser un NSScanner pour ce type d'activité.

NSString *string = @"ok no ok no no no ok"; 
NSScanner *theScanner; 
NSString *TARGET = @"no"; // careful selecting target string this would detect no in none as well 
int count = 0; 

theScanner = [NSScanner scannerWithString:string]; 

while ([theScanner isAtEnd] == NO) 
{ 
    if ([theScanner scanString:TARGET intoString:NULL]) 
     count++; 
} 

NSLog(@"target (%@) occurrences = %d", TARGET, count) 

;

+0

bonnes années ....... – Saad