245 votes

Comparaison de la casse NSString

Quelqu'un peut-il m'indiquer toutes les ressources sur la comparaison de la casse en Objective-C? Il ne semble pas avoir une méthode équivalente à str1.equalsIgnoreCase(str2)

571voto

Jason Coco Points 52303
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
  // strings are equal except for possibly case
}

La documentation est situé à la Recherche et les Méthodes de Comparaison

53voto

ohho Points 17243
 NSString *stringA;
 NSString *stringB;

 if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
     // match
 }

Remarque: stringA && est requis car lorsque l' stringA est nil:

 stringA = nil;
 [stringA caseInsensitiveCompare:stringB] // return 0

et justement, NSOrderedSame est également définie comme 0.

L'exemple suivant est un exemple typique piège:

 NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
 if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
     // what happens if "Rank" is not found in standardUserDefaults
 }

46voto

drawnonward Points 35444

Une alternative si vous voulez plus de contrôle que de simplement compte de la casse:

[someString compare:otherString options:NSCaseInsensitiveSearch];

Numérique de recherche et de signes diacritiques insensibilité sont deux options pratiques.

23voto

Allwood Points 313

Vous pouvez toujours vous assurer qu'ils sont dans le même cas avant la comparaison:

if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
    // They're equal
}

Le principal avantage étant de vous éviter le problème décrit par matm concernant la comparaison néant cordes. Vous pouvez soit cocher la chaîne n'est pas nul avant de faire l'une de l' compare:options: méthodes, ou vous pourriez être paresseux (comme moi) et d'ignorer le coût de la création d'une nouvelle chaîne pour chaque comparaison (qui est minime si vous êtes seulement un ou deux comparaisons).

7voto

WhirlWind Points 8305
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X