2011-03-14 2 views

Répondre

4

Essayez d'utiliser rangeOfString:

NSRange result = [strOne rangeOfString:strTwo]; 

De la documentation:

Retourne un NSRange structure donnant l'emplacement et la longueur dans le récepteur de la première occurrence de aString. Renvoie {NSNotFound, 0} si une chaîne n'est pas trouvée ou est vide (@"").

+0

Merci! Fonctionne comme un charme. Je poste mon code ci-dessous pour que d'autres puissent l'utiliser. –

1

Pour toute personne ayant besoin du code à vérifier est une chaîne existe dans une chaîne, voici mon code grâce à fbrereto. Cet exemple vérifie si une chaîne contenue dans un tableau de chaînes (stringArray) se trouve dans une chaîne (myString):

int count = [stringArray count]; 

for (NSUInteger x = 0; x < count; ++x) { 

    NSRange range = [self.myString rangeOfString:[stringArray objectAtIndex:x]]; 

    if (range.length > 0) { 
     // A match has been found 
     NSLog(@"string match: %@",[stringArray objectAtIndex:x]); 
    } 
} 
+1

Notez que bien que ce code fonctionne, une meilleure vérification est de voir si range.position! = NSNotFound (une valeur constante qui sera retournée quand il ne trouve rien). –

1

Je crois que c'est la syntaxe correcte pour vérifier si la plage existe (réponse corriger de Kendall): range.location != NSNotFound

0

peu à peu s'égarer hors sujet, mais j'explose toujours mes cordes, ce qui signifierait simplement exploser à l'aide de votre chaîne de recherche comme une clé et vous pouvez utiliser le compte de tableau pour voir combien de cas que vous avez. Juste au cas où quelqu'un viendrait d'un langage de code qui utilise "exploser" pour souffler une chaîne dans un tableau comme moi, j'ai trouvé que ma propre fonction d'explosion était extrêmement utile, ceux qui n'utilisent pas "exploser" manquent:

- (NSMutableArray *) explodeString : (NSString *)myString key:(NSString*) myKey 
{ 
    NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
    NSRange nextBreak = [myString rangeOfString:myKey]; 
    while(nextBreak.location != NSNotFound) 
    { 
     [myArray addObject: [myString substringToIndex:nextBreak.location]]; 
     myString = [myString substringFromIndex:nextBreak.location + nextBreak.length]; 
     nextBreak = [myString rangeOfString:myKey]; 
    } 
    if(myString.length > 0) 
     [myArray addObject:myString]; 

    return myArray; 
} 

fonctionne comme ceci:

[self explodeString: @"John Smith|Age: 37|Account Balance: $75.00" key:@"|"]; 

qui retournera ce tableau:

[@"John Smith", @"Age: 37", @"Account Balance: $75.00"]; 

Cela vous permet de tirer rapidement une valeur spécifique dans un espace restreint, comme si vous avez un client et que vous voulez savoir combien d'argent il a:

[[self explodeString: clientData key: pipe] objectAtIndex: 1]; 

ou si vous voulez plus précisément le montant en dollars comme float:

[[[self explodeString: [[self explodeString: clientData key: pipe] objectAtIndex: 1] key: @": "] objectAtIndex: 2] floatValue]; 

de toute façon je trouve des tableaux beaucoup plus faciles à utiliser et plus flexibles, donc c'est très utile pour moi. De plus, avec un peu d'effort, vous pouvez faire un type de données « chaîne explosif » pour votre bibliothèque privée qui vous permet de le traiter comme une chaîne ou de retourner une valeur d'index en fonction de la clé

ExplodableString *myExplodableString; 
myExplodableString.string = @"This is an explodable|string"; 
NSString *secondValue = [myExplodableString useKey: @"|" toGetValue: index]; 
Questions connexes