2010-05-09 14 views
9

Was ist das Beste, um festzustellen, ob ein NSString leer ist? Im Moment bin ich mit dem folgenden:So ermitteln Sie, ob NSString leer ist

if (string == nil || [string isEqualToString:@""]) { // do something }

Vielen Dank für jede Beratung.

Antwort

24
if ([string length] == 0) { 
    // do something 
} 

Wenn die Zeichenfolge nil ist, dann ist die Nachricht an nil wird Null zurück, und alles wird noch gut sein.

+0

+1 für Ihre Antwort. Was ist mit Whitespaces? Was ist, wenn Sie sie nicht zählen wollen? Jeder handliche Weg? – cocoafan

+1

@cocoafan Nicht präzise. Wenn Sie dies häufig tun müssen, würde ich vorschlagen, eine Kategorie zu 'NSString' hinzuzufügen, etwas wie' isNotEmpty', mit dem Sie Ihre benutzerdefinierten Eincheckungen durchführen können. Dann können Sie einfach 'if ([string isNotEmpty]) {... } 'und es wird auch mit' nil's richtig umgehen ... –

+0

Vielleicht möchten Sie immer noch wissen, warum die Länge 0 zurückgegeben hat, so dass es manchmal nützlich sein könnte, nach Null zu suchen, nachdem Sie die Null erhalten haben. – uchuugaka

0

Nicht gut lösen

[nil length] ist 0

(0==0) ist 1

dann ([string length] == 0)1 sein wird. Obwohl es falsch ist.

Der beste Weg ist

if (![string length]) { 

} 
+2

length ist eine NUMBER und sollte mit == 0 überprüft werden. If (! [String length]) ist ein c hack und (semantisch) nicht korrekt seit! sollte für Booleans verwendet werden. Bitte sag nicht, dass es immer noch funktioniert. Ich weiß das. Es ist nur neanderthalisch. – cocoafan

+2

Diese Antwort ist falsch. ! 0 ist auch 1, genau wie 0 == 0. Das Ergebnis ist das gleiche, das einzige, worüber gestritten werden kann, ist eine Frage des Stils – Sven

2

Dies wird nicht nur überprüfen, wenn es nichts in der Zeichenfolge ist, sondern auch falsch zurück, wenn es nur Leerzeichen ist.

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


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

Dies entfernt nur führende und nachfolgende Leerzeichen – uchuugaka

+0

Sie wissen was, Sie ' hast recht. Ich habe viel experimentiert und den falschen Code kopiert und eingefügt. Es ist korrigiert. Dies ist viel effizienter. –

+1

Was auch immer es sein mag, '-stringByReplacingOccurrencesOfString: withString:' ist nicht besonders effizient. Viel besser, um zu testen, wonach Sie suchen: Nicht-Leerzeichen. '! myString || [myString rangeOfCharacterFromSet: [[NSCharacterSet whitespaceCharacterSet] invertedSet] .location == NSNotFound' (In diesem Fall müssen Sie testen, ob 'myString'' nil' ist, weil ein 'NSRange' aus dem Messaging' nil' nicht enthalten ist 'NSNotFound' in seinem' location' Feld.) –

Verwandte Themen