2013-07-16 1 views
0

Je cherche une méthode Objective-C qui trouvera un mot spécifique dans une chaîne. J'utilisais:Méthode qui trouve un mot exact dans une chaîne attribuée

- (NSRange)rangeOfString:(NSString *)aString 

mais ce n'est pas exactement ce que je veux. La raison pour laquelle je cherche plus un match symbolique que de trouver le mot lui-même. Je travaille avec des chaînes attribuées et j'ai besoin de parties spécifiques d'une chaîne pour avoir des attributs. Les parties qui ont besoin des attributs doivent être égales au contenu d'un objet. Le problème que je rencontre est que si j'ai un objet avec le contenu 'star', mais le mot 'stars' est aussi dans la chaîne, la méthode range va juste retourner la plage de 'star' et laisser le s , plutôt que de déterminer si le mot exact 'star' existe dans la chaîne.

Je ne suis pas sûr si ce genre de méthode existe, mais j'apprécierais grandement toute aide! Si vous avez besoin d'autres précisions s'il vous plaît faites le moi savoir!

modifier: Pour aider un peu, je vais vous donner ma situation exacte:

J'ai un jeu de cartes qui correspond à 3 cartes. Pour cet exemple, disons que la carte a un ■ dessus. Il n'y a pas deux cartes identiques. La sélection de cartes dans un ordre comme '■■', '■■■' et '■■' entraînera le problème. Comme je l'ai dit, le contenu doit être attribué. Le problème est que, comme il y a 2 cartes avec '■■' et une avec '■■', les attributs sont placés sur le premier '■■', mais la carte '■■' est placée avec les attributs des cartes '■■' sur ses 2 premiers carrés et la carte finale '■■' ne reçoit jamais rien. Donc le problème est qu'il trouve la première sous-chaîne de '■■' même si elle est séparée d'un mot plus grand. J'en ai besoin pour regarder seulement les mots/jetons dans la chaîne qui correspondent exactement au contenu.

Répondre

1

semble être une tâche réalisable pour les expressions régulières (oiseau très rare!):

NSRange token = [string rangeOfString:@"\\bstar\\b" options:NSRegularExpressionSearch]; 
+0

J'ai regardé cette méthode, mais je ne savais pas si elle serait en mesure d'aider cette situation. J'ai fait une modification au message original pour donner plus de clarté sur ma situation. – Jonathan

0

Vous pouvez transformer une chaîne attribuée dans une chaîne régulière avec [attributedString string] et procéder comme d'habitude avec NSStringEnumerationByWords. Exemple, donné ... étoiles ... étoile ... il devrait retourner étoile mais pas étoiles.

[[s string] enumerateSubstringsInRange:NSMakeRange(0, [s length]) 
         options:NSStringEnumerationByWords 
        usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
    if ([substring isEqualToString:@"star"]){ 
     NSLog(@"%@", substring); 
     *stop = YES; 
    } 
}]; 

(pas sûr si je comprends bien votre exemple de carte)

Questions connexes