2009-12-28 6 views
0

J'essaie de trouver un mot dans une expression (NSString). Pour cela, j'ai explosé les composants de la phrase en sous-chaînes individuelles et maintenant j'essaie de les comparer au mot que je cherche, mais cela ne fonctionne pas.Comparaison de l'élément NSArray à NSString

Quelle serait l'approche correcte pour cela et corriger pour le logiciel ci-dessous?

NSString *myString = @"Mi Programa es genial"; 
NSArray *explodedDescription = [myString componentsSeparatedByString:@" "]; 

if ([explodedDescription objectAtIndex:1] == @"Programa") { 
    NSLog(@"Found"); 
} 
+1

Notez que la division par un caractère espace est une approche assez naïve. Le texte peut être dans une langue qui utilise un séparateur différent, ou peut avoir un caractère de retour à la ligne sans espace. –

+0

Ou peut-être le dernier mot d'une clause (incluant ainsi une virgule, un point-virgule ou une ponctuation terminale comme un point final), ou peut être le premier ou le premier mot, différant ainsi par la capitalisation, ou ne pas être la version racine du mot: il peut s'agir d'un gérondif, d'un comparatif, d'un superlatif, d'un passé, d'un participe passé ou de tout autre dérivé de la racine. –

+0

La seule vraie solution est d'analyser la chaîne en utilisant un analyseur réel qui est conscient des nombreuses formes de ponctuation, et chercher des mots en utilisant une base de données qui peut connecter des racines avec des dérivés (par exemple, rechercher "recherche") et un comparateur qui peut rendre compte des fautes de frappe (par exemple, "sarching" ou "saerching" ou "searthing"). Même alors, préparez-vous pour beaucoup, beaucoup de cas de bord. –

Répondre

7

Les chaînes NSS sont comparées à isEqualToString. Vous comparez des pointeurs au lieu des valeurs.

Voir NSString documentation

2

Vous êtes ce faire à la dure! Utilisez la méthode -rangeOfString: de NSString ou l'une de ses variantes pour obtenir l'emplacement d'une chaîne dans une autre chaîne.

+0

Cela ne marchera pas pour * mots *, car il détectera heureusement un mot dans un autre mot. Les jurons-filtres naïfs sont les victimes les plus courantes. dans ce contexte, on l'appelle le problème de Scunthorpe (après une ville au Royaume-Uni dont on ne peut pas dire le nom sous un juron-filtre muet). –

+0

Évidemment, vous feriez l'analyse des limites de mots pour chaque résultat et continueriez la recherche si le résultat échoue à la vérification. Voir la méthode doubleClickAtIndex: de NSAttributedString. –