Comment tester si un NSString
est vide dans Objective-C?
ios
objective-c
nsstring
Jamey McElveen
la source
la source
@"\u200B"
(composé uniquement du caractère Unicode ZERO WIDTH SPACE . L'imprimer imprimera 0 caractères (vérifiez en utilisant la police à espacement fixe), mais string.length donnera 1. Il existe d'autres caractères Unicode (comme le OBJECT REPLACEMENT CHARACTER ) qui se comportent de la même manière. Vous pouvez obtenir ce dernier lors de l'analyse du texte PDFZERO WIDTH SPACE
est n'a pas vraiment d'importance, car@"\u200B"
c'est quand même un caractère, donc si vous testez que la chaîne est vide, cela dira que ce n'est pas parce qu'il y a un caractère dedans. Il n'est tout simplement pas imprimable selon la norme Unicode.![string length]
. Semble plus propre.La réponse de Marc est correcte. Mais je profite de l'occasion pour inclure un pointeur sur le général de Wil Shipley
isEmpty
, qu'il a partagé sur son blog :la source
-isNotEmpty
:)La première approche est valide, mais ne fonctionne pas si votre chaîne contient des espaces vides (
@" "
). Vous devez donc effacer ces espaces blancs avant de le tester.Ce code efface tous les espaces vides des deux côtés de la chaîne:
Une bonne idée est de créer une macro, vous n'avez donc pas à taper cette ligne monstre:
Vous pouvez maintenant utiliser:
la source
NSString
catégorie qui ajoute une méthode appeléetrimmedString
qui fait exactement ce que vous avez écrit.whitespaceCharacterSet
n'inclut pas de nouvelles lignes! Voici une catégorie que j'ai écrite, y compristrim
et quelques autres méthodes utiles: github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…L'une des meilleures solutions que j'ai jamais vues (mieux que celle de Matt G) est cette fonction en ligne améliorée que j'ai choisie sur un dépôt Git Hub (celui de Wil Shipley, mais je ne trouve pas le lien):
la source
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Tôt ou tard, vous vous demanderez à quel type de classe vous avez affaire, mieux vaut le faire sur la première référence.Vous devriez mieux utiliser cette catégorie:
la source
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end
comme une combinaison de la réponse de Marc et Kyle.Je mets ceci:
Le problème est que si self est nul, cette fonction n'est jamais appelée. Cela retournera faux, ce qui est souhaité.
la source
-(BOOL)isEmpty{ return ![self isNotEmpty]}
ne fonctionnera pas sur la catégorie.condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Tôt ou tard, vous vous demanderez à quel type de classe vous avez affaire, mieux vaut le faire sur la première référence.Une autre option consiste à vérifier si elle est égale à
@""
avecisEqualToString:
comme ceci:la source
Passez simplement votre chaîne à la méthode suivante:
la source
Utilisez simplement l'une des
if
else
conditions ci-dessous:Méthode 1:
Méthode 2:
la source
Version Swift
Même s'il s'agit d'une question sur l'objectif C, je devais l'utiliser
NSString
dans Swift, je vais donc également inclure une réponse ici.Ou s'il
NSString
s'agit d'une option:La
String
version normale de Swift estVoir aussi: Vérifier la chaîne vide dans Swift?
la source
Peut-être que cette réponse est le double des réponses déjà données, mais j'ai fait peu de modifications et de changements dans l'ordre de vérification des conditions. Veuillez vous référer au code ci-dessous:
la source
Vous pouvez vérifier que votre chaîne est vide ou non en utilisant cette méthode:
La meilleure pratique est de faire dire à une classe partagée UtilityClass et d'annoncer cette méthode afin que vous puissiez utiliser cette méthode en l'appelant simplement dans votre application.
la source
Vous avez 2 méthodes pour vérifier si la chaîne est vide ou non:
Supposons que votre nom de chaîne soit
NSString *strIsEmpty
.Méthode 1:
Méthode 2:
Choisissez l'une des méthodes ci-dessus et apprenez si la chaîne est vide ou non.
la source
Vérifiez simplement la longueur de votre chaîne
un message à NIL retournera nil ou 0, donc pas besoin de tester pour nil :).
Bon codage ...
la source
Cela fonctionne comme un charme pour moi
Si le
NSString
ests
la source
Ainsi, outre le concept de base de vérification d'une longueur de chaîne inférieure à 1, il est important de considérer le contexte en profondeur. Les langues humaines ou informatiques ou autrement peuvent avoir des définitions différentes de chaînes vides et dans ces mêmes langues, un contexte supplémentaire peut encore changer la signification.
Disons qu'une chaîne vide signifie "une chaîne qui ne contient aucun caractère significatif dans le contexte actuel".
Cela pourrait signifier visuellement, car la couleur et la couleur d'arrière-plan sont les mêmes dans une chaîne attribuée. Effectivement vide.
Cela pourrait signifier vide de caractères significatifs. Tous les points ou tous les tirets ou tous les traits de soulignement peuvent être considérés comme vides. En outre, vide de caractères significatifs significatifs pourrait signifier une chaîne qui n'a pas de caractères que le lecteur comprend. Il peut s'agir de caractères dans une langue ou un jeu de caractères défini comme dépourvu de sens pour le lecteur. Nous pourrions le définir un peu différemment pour dire que la chaîne ne forme aucun mot connu dans une langue donnée.
On pourrait dire que vide est fonction du pourcentage d'espace négatif dans les glyphes rendus.
Même une séquence de caractères non imprimables sans représentation visuelle générale n'est pas vraiment vide. Les personnages de contrôle me viennent à l'esprit. Surtout la plage ASCII basse (je suis surpris que personne ne les ait mentionnés car ils utilisent de nombreux systèmes et ne sont pas des espaces car ils n'ont normalement pas de glyphes et pas de métriques visuelles). Pourtant, la longueur de la chaîne n'est pas nulle.
Conclusion. La longueur seule n'est pas la seule mesure ici. L'appartenance à un ensemble contextuel est également très importante.
L'appartenance au jeu de caractères est une mesure supplémentaire commune très importante. Les séquences significatives sont également assez courantes. (pensez SETI ou crypto ou captchas) Il existe également d'autres ensembles de contextes plus abstraits.
Réfléchissez donc bien avant de supposer qu'une chaîne n'est vide qu'en fonction de la longueur ou de l'espace.
la source
Post très utile, pour ajouter un support NSDictionary ainsi qu'un petit changement
la source
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Tôt ou tard, vous vous demanderez à quel type de classe vous avez affaire, mieux vaut le faire sur la première référence.la source
stringByStrippingWhitespace
La meilleure façon est d'utiliser la catégorie.
Vous pouvez vérifier la fonction suivante. Qui a toutes les conditions à vérifier.
la source
La meilleure façon dans tous les cas est de vérifier la longueur de la chaîne donnée. Pour cela, si votre chaîne est myString, le code est:
la source
la source
Vérifiez ça :
Ou
J'espère que cela vous aidera.
la source
Vous pouvez facilement vérifier si la chaîne est vide avec ceci:
la source
J'ai vérifié une chaîne vide en utilisant le code ci-dessous:
la source
C'est aussi simple que
if([myString isEqual:@""])
ouif([myString isEqualToString:@""])
la source
la source
Vous pouvez avoir une chaîne vide de deux manières:
1) @ "" // Ne contient pas d'espace
2) @ "" // Contient de l'espace
Techniquement, les deux chaînes sont vides. Nous pouvons écrire les deux choses en utilisant UNE seule condition
la source
Essayez ce qui suit
la source
la source
str.length
lèvera une exception sistr
est nul.la source