NSString+rangesOfString

Voici une petite category pour NSString qui permet de détecter toutes les occurrences d'une NSString dans une autre NSString et renvoyer un NSArray de NSRange (sous forme de NSValue).



NSString+rangesOfString.h
<br />
#import &lt;Foundation/Foundation.h&gt;<br />
@interface NSString (rangesOfString)<br />
- (NSArray *)rangesOfString:(NSString *)string;<br />
@end<br />




NSString+rangesOfString.m
<br />
#import &quot;NSString+rangesOfString.h&quot;<br />
@implementation NSString (rangesOfOccurence)<br />
- (NSArray *)rangesOfString:(NSString *)string<br />
{<br />
    NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];<br />
    NSRange range = NSMakeRange(0, [self length]);<br />
    while (YES)<br />
    {<br />
	    NSRange r = [self rangeOfString:string options:NSCaseInsensitiveSearch range:range];<br />
	    if (r.location == NSNotFound) {<br />
		    break;<br />
	    }<br />
	    else<br />
	    {<br />
		    [array addObject:[NSValue valueWithRange:r]];<br />
		    range = NSMakeRange(r.location + 1, [self length] - (r.location + 1) );<br />
	    }<br />
    }<br />
   <br />
    return array;<br />
}<br />
@end<br />




Je l'ai utiliser pour faire un jeu du pendu. C'est la premiere fois que je crée une "Category" donc je sais pas si je l'ai faite de la bonne façon donc n'hésitez pas à  me corriger.
Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur
    Hello



    Note que pour ce genre de choses tu peux aussi penser à  utiliser NSRegularExpression qui permet déjà  de récupérer un NSArray de matches. Mais c'est sûr que pour un matching de chaà®ne sans regex, c'est aussi bien avec ta méthode image/smile.png' class='bbc_emoticon' alt=':)' />



    Et sinon pour un jeu de pendu, si tu as à  détecter uniquement une seule lettre à  chaque fois, et donc que la longueur de la chaà®ne à  détecter est toujours 1, un NSIndexSet est sans doute plus sympa à  manipuler et évite de devoir encapsuler les valeurs dans un NSValue image/wink.png' class='bbc_emoticon' alt=';)' />
  • Pour le NSIndexSet j'y ai pensé mais j'ai voulu faire de quelque chose plus général.
  • Pas testé mais ça devrait fonctionner :
    CFArrayRef array = CFStringCreateArrayWithFindResults(NULL, aString, aSubstring, CFRangeMake(0, aString.length), 0);




    Ne jamais sous-estimer le pouvoir de CoreFoundation.
Connectez-vous ou Inscrivez-vous pour répondre.