Comment puis-je vérifier si une chaîne ( NSString
) contient une autre chaîne plus petite?
J'espérais quelque chose comme:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Mais le plus proche que j'ai pu trouver était:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
Quoi qu'il en soit, est-ce la meilleure façon de savoir si une chaîne contient une autre chaîne?
if ([string rangeOfString:@"hello"] == 0) {...}
d'une erreur de non-concordance de type pour NSRange et int. pour résoudre ce problème, vous devez modifier la ligne comme suit:if ([string rangeOfString:@"hello"].length == 0) {...}
Réponses:
La clé remarque que
rangeOfString:
renvoie uneNSRange
structure, et la documentation indique qu'elle renvoie la structure{NSNotFound, 0}
si la "meule de foin" ne contient pas l '"aiguille".Et si vous êtes sur iOS 8 ou OS X Yosemite, vous pouvez maintenant faire: (* REMARQUE: cela plantera votre application si ce code est appelé sur un appareil iOS7).
(C'est aussi ainsi que cela fonctionnerait dans Swift)
👍
la source
[string rangeOfString:@"bla"].location != NSNotFound
sera vraie lorsque la chaîne l'estnil
!Pour iOS 8.0+ et macOS 10.10+, vous pouvez utiliser le natif de NSString
containsString:
.Pour les anciennes versions d'iOS et de macOS, vous pouvez créer votre propre catégorie (obsolète) pour NSString:
Remarque: Observez le commentaire de Daniel Galasko ci-dessous concernant la dénomination
la source
return [self rangeOfString:substring].location != NSNotFound;
et l'ai inclus dans ma bibliothèque de refactoring, es_ios_utils. github.com/peterdeweese/es_ios_utilsÉtant donné que cela semble être un résultat de haut niveau dans Google, je veux ajouter ceci:
iOS 8 et OS X 10.10 ajoutent la
containsString:
méthode àNSString
. Une version mise à jour de l'exemple de Dave DeLong pour ces systèmes:la source
// Vous pouvez également utiliser ce qui suit:
la source
Avec iOS 8 et Swift , nous pouvons utiliser la
localizedCaseInsensitiveContainsString
méthodela source
Donc personnellement je déteste vraiment
NSNotFound
mais comprends sa nécessité.Mais certaines personnes peuvent ne pas comprendre la complexité de la comparaison avec NSNotFound
Par exemple, ce code:
a ses problèmes:
1) Évidemment, si
otherString = nil
ce code se bloque. un test simple serait:résulte en !! CRASH !!
2) Ce qui n'est pas si évident pour quelqu'un de nouveau à objective-c, c'est que le même code ne plantera PAS quand
string = nil
. Par exemple, ce code:et ce code:
entraînera à la fois
Ce qui n'est clairement pas ce que vous voulez.
Donc, la meilleure solution qui, selon moi, fonctionne est d'utiliser le fait que rangeOfString renvoie la longueur de 0, alors un code plus fiable est le suivant:
OU SIMPLEMENT:
qui reviendra pour les cas 1 et 2
C'est mes 2 cents ;-)
Veuillez consulter mon Gist pour un code plus utile.
la source
Une version améliorée de la solution de P i , une catégorie sur NSString, qui non seulement indiquera si une chaîne est trouvée dans une autre chaîne, mais prend également une plage par référence, est:
Utilisez-le comme:
la source
Voici un extrait de fonction copier-coller:
la source
Oneliner (Plus petite quantité de code. SEC, car vous n'en avez qu'un
NSLog
):la source
la source
essaye ça,
la source
Meilleure solution. Aussi simple que ça! Si vous souhaitez rechercher un mot ou une partie de la chaîne. Vous pouvez utiliser ce code. Dans cet exemple, nous allons vérifier si la valeur de word contient "acter".
la source
Dans Swift 4:
la source
Si vous en avez besoin une fois, écrivez:
la source
En cas de swift, cela peut être utilisé
la source
Si ne vous souciez pas de la chaîne sensible à la casse. Essayez ceci une fois.
la source
Veuillez utiliser ce code
la source
Utilisez l'option NSCaseInsensitiveSearch avec rangeOfString: options:
Le résultat de sortie est trouvé: Oui
Les options peuvent être "ou" sélectionnées ensemble et comprennent:
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch et plus
la source
La première chaîne contient ou non la deuxième chaîne,
la source
Essaye ça:
Swift 4.1, 4.2:
Pour Objective-C:
la source
Swift 4 et au-dessus
Objectif c
la source
la source
String
type. Deuxièmement, nous avons tous les objets. Donc, comme argument, vous devez passerNSString
. Je vote pour la suppression en raison de la mauvaise qualité d'une réponse à une question très active.Si une certaine position de la chaîne est nécessaire, ce code vient se placer dans Swift 3.0 :
la source