62 votes

Comment vérifier le dernier caractère d'une NSString

Je souhaite poser une question sur NSString * dans l'objectif C. Puis-je vérifier le dernier caractère d'un objet NSString *?

Exemple:

 NSString* data = @"abcde,";

if(data is end with ',') // I don't know this part
  // do sth
 

Merci beaucoup.

169voto

robinjam Points 2714
NSString *data = @"abcde,";
if([data hasSuffix:@","]) // This returns true in this example
    // do something

6voto

Abizern Points 52378

Le NSString Guide de Programmation recommande:

Si vous voulez tout simplement pour déterminer si une chaîne contient un modèle donné, vous pouvez utiliser un prédicat:

Donc, dans votre exemple:

NSString *data = @"abcde,";

// Create the predicate
NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"SELF endswith %@", @","];

// Run the predicate
// match == YES if the predicate is successful
BOOL match = [myPredicate evaluateWithObject:data];

// Do what you want
if (match) {
    // do something
}

Explication est un peu longue à écrire? Peut-être, mais si vous faites cela dans plus d'un endroit, il peut facilement être refait dans un helper.

Voici un lien vers le NSPredicate docs.

Modifier

J'ai fait quelques profilage et il est exagéré dans ce cas simple (voir mon commentaire ci-dessous). Je vais laisser la réponse jusqu'ici de toute façon, juste comme exemple de l'utilisation de prédicats pour ce genre de chose.

4voto

Sam Deane Points 455

Si vous êtes inquiet au sujet de la performance, et que vous voulez vérifier pour un caractère, utilisez -characterAtIndex: méthode peut très bien être plus rapide. -hasSuffix: prend une chaîne de caractères, donc potentiellement besoin de faire plus de travail que la simple vérification d'un seul caractère (bien que la différence peut être trivial).

Vous pouvez également utiliser les catégories pour ajouter une méthode à NSString comme ceci:

@interface NSString(StringUtilities)
    - (BOOL) endsWithCharacter: (unichar) c;
@end

@implementation NSString(StringUtilities)

    - (BOOL) endsWithCharacter: (unichar) c
    {
        NSUInteger length = [self length];
        return (length > 0) && ([self characterAtIndex: length - 1] == c);
    }

@end

// test it...
NSString *data = @"abcd,";
if ([data endsWithCharacter: L','])
{

}

Vous devriez profil, bien sûr, pour être sûr. Gardez à l'esprit que, en mettant les endsWithCharacter dans une méthode, nous avons ajouté la transmission de message de surcharge, ce qui fausserait les résultats de profilage, sauf si vous faites la même chose lors de l'analyse des solutions de rechange.

Tout cela est sans doute prématuré d'optimisation pour la plupart des cas - mais bien sûr, si vous êtes en train de faire ce test des milliers de fois par seconde, il peut bien en question (dans ce cas, vous souhaiterez probablement utiliser directement le code dans la boucle, comme la transmission de messages à l'intérieur d'un resserrement de l'intérieur de la boucle n'est pas un bon plan).

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