693 Stimmen

Wie teste ich, ob eine Zeichenkette in Objective-C leer ist?

Wie teste ich, ob ein NSString in Objective-C leer ist?

1200voto

Marc Charbonneau Punkte 40221

Sie können prüfen, ob [string length] == 0 . Damit wird geprüft, ob es sich um eine gültige, aber leere Zeichenkette (@"") handelt oder ob sie null ist, da der Aufruf von length auf nil wird ebenfalls 0 zurückgeben.

126voto

Matt G Punkte 2363

Die Antwort von Marc ist richtig. Aber ich möchte die Gelegenheit nutzen, um auf Wil Shipleys verallgemeinerte isEmpty die er auf seiner Website Blog :

static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}

96voto

Der erste Ansatz ist gültig, funktioniert aber nicht, wenn die Zeichenkette Leerzeichen enthält ( @" " ). Daher müssen Sie diese Leerzeichen vor dem Testen entfernen.

Dieser Code löscht alle Leerzeichen auf beiden Seiten der Zeichenkette:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Eine gute Idee ist es, ein Makro zu erstellen, damit Sie diese Monsterzeile nicht eintippen müssen:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

Jetzt können Sie es verwenden:

NSString *emptyString = @"   ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");

33voto

Rob Punkte 2736

Eine der besten Lösungen, die ich je gesehen habe (besser als die von Matt G), ist diese verbesserte Inline-Funktion, die ich in einem Git Hub Repo gefunden habe (Wil Shipley's, aber ich kann den Link nicht finden):

// Check if the "thing" passed is empty
static inline BOOL isEmpty(id thing) {
    return thing == nil
    || [thing isKindOfClass:[NSNull class]]
    || ([thing respondsToSelector:@selector(length)]
        && [(NSData *)thing length] == 0)
    || ([thing respondsToSelector:@selector(count)]
        && [(NSArray *)thing count] == 0);
}

17voto

Sie sollten diese Kategorie besser nutzen:

@implementation NSString (Empty)

    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X