9
votes

Comment déterminer si nstring est vide

Quel est le meilleur était de déterminer si un nstring est vide? En ce moment, j'utilise ce qui suit:

Si (string == nil || [chaîne isélaltostring: @ ""]) { // faire quelque chose }

Merci pour tout conseil.


0 commentaires

3 Réponses :


24
votes
if ([string length] == 0) {
    // do something
}
If the string is nil, then the message to nil will return zero, and all will still be well.

7 commentaires

+1 pour votre réponse. Qu'en est-il des suites d'espaces? Et si vous ne voulez pas les compter? Toute façon pratique?


@cocoafan non concis. Si vous devez le faire fréquemment, je suggère d'ajouter une catégorie à nstring , quelque chose comme isnotempty , que vous pouvez faire vos chèques personnalisés. Ensuite, vous pouvez simplement faire Si ([chaîne isnoteur]) {...} et il gérera également nil s correctement ...


Vous voudrez peut-être toujours savoir pourquoi la longueur est renvoyée 0 afin qu'il puisse être utile parfois de vérifier NIL, après avoir obtenu le zéro.


Vous voudriez vérifier une chaîne tempée créée en divisant la chaîne avec composantSeparatedbharactersIset: [Nscharacterset WhitSpacCacharacTerset] puis rejoignant la gamme résultante des composants de chaîne.


Si vous attendez de grandes chaînes ou si vous n'avez fréquemment pas d'espace blanche, vous pouvez envelopper cela dans une vérification de la gamme de rubriquesFromet pour éviter une matrice inutile.


@Johncalsbeek s'il vous plaît, pas de négatifs dans les getters booléens! Je déteste voir le code comme si (! [String isnotempty]) {. Mieux vaut nommer la méthode isempty ou isBlank .


@Sulthan Je suis tout à fait d'accord avec vous, mais être négatif est important pour cette méthode particulière, car les messages vers Nil retourner n ° . Peut-être que hasvalue ou quelque chose de ce genre serait mieux.



0
votes

Pas bonne résolution

[NIL LONGUEL] est 0

(0 == 0) est 1

alors ([longueur de chaîne] == 0) sera 1 . Bien que ce soit faux.

Le meilleur moyen est xxx


2 commentaires

La longueur est un nombre et doit être vérifiée avec == 0. Si (! [Longueur de la chaîne]) est un piratage C et (sémantiquement) non correct depuis! devrait être utilisé pour les booléens. S'il vous plaît, ne dis pas que cela fonctionne toujours. Je sais que. C'est juste Néandertalish.


Cette réponse est fausse. ! 0 est 1 aussi, juste la même chose que 0 == 0. Le résultat est identique, la seule chose qui peut être argumée ici est une question de style



2
votes

Ceci vérifiera non seulement s'il n'y a rien dans la chaîne mais retournera également faux s'il ne s'agit que de blouses.

NSString *tempString = [myString stringByReplacingOccurrencesOfString:@" " withString:@""];


if ([tempString length] != 0) {
    //There is something in the string.
} else {
    //There is nothing or it is just whitespace.
}


3 commentaires

Cela supprime seulement les espaces de tête et de fuite


Vous savez quoi, vous avez raison. Je faisais beaucoup d'expérimentation et je dois avoir copié et collé le mauvais code. C'est corrigé. Ceci est beaucoup plus efficace.


Tout ce que cela pourrait être, -StringbyReplacingocurrencesFstring: l'aide: n'est pas particulièrement efficace. Beaucoup mieux pour tester ce que vous recherchez: des personnages non blouses. ! mystring || [mystring rangeofcharacterfromset: [[[[Nscharactterset WhitSpacCacétaractSetTerset] inversedset] .Location == nsnotfound (dans ce cas, vous devez tester si mystring est nil explicitement parce qu'un nsrange résultant de la messagerie nil n'aura pas nsnotfound dans son emplacement .)