Wie teste ich, ob ein NSString
in Objective-C leer ist?
ios
objective-c
nsstring
Jamey McElveen
quelle
quelle
@"\u200B"
(besteht nur aus dem Unicode-Zeichen ZERO WIDTH SPACE . Wenn Sie es ausdrucken, werden 0 Zeichen gedruckt (überprüfen Sie dies mit monospaced Schriftart), aber string.length ergibt 1. Es gibt andere Unicode-Zeichen (wie OBJECT REPLACEMENT CHARACTER ), die sich ebenfalls verhaltenZERO WIDTH SPACE
ist, spielt keine Rolle, da@"\u200B"
es sich dennoch um ein Zeichen handelt. Wenn Sie also testen, ob die Zeichenfolge leer ist, wird dies nicht darauf zurückzuführen sein, dass sich ein Zeichen darin befindet. Es kann einfach nicht nach dem Unicode-Standard gedruckt werden.![string length]
. Scheint sauberer.Marc's Antwort ist richtig. Aber ich werde diese Gelegenheit nutzen, um einen Hinweis auf Wil Shipleys Verallgemeinerung aufzunehmen
isEmpty
, den er in seinem Blog geteilt hat :quelle
-isNotEmpty
:)Der erste Ansatz ist gültig, funktioniert jedoch nicht, wenn Ihre Zeichenfolge Leerzeichen enthält (
@" "
). Sie müssen diese Leerzeichen also löschen, bevor Sie sie testen.Dieser Code löscht alle Leerzeichen auf beiden Seiten der Zeichenfolge:
Eine gute Idee ist es, ein Makro zu erstellen, damit Sie diese Monsterzeile nicht eingeben müssen:
Jetzt können Sie verwenden:
quelle
NSString
Kategorie bedient werden, die eine Methode namens hinzufügttrimmedString
, die genau das tut, was Sie geschrieben haben.whitespaceCharacterSet
keine Zeilenumbrüche enthält! Hier ist eine Kategorie, die ich geschrieben habe, einschließlichtrim
einiger anderer nützlicher Methoden: github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…Eine der besten Lösungen, die ich je gesehen habe (besser als die von Matt G), ist diese verbesserte Inline-Funktion, die ich bei einem Git Hub-Repo (Wil Shipleys, aber ich kann den Link nicht finden) übernommen habe:
quelle
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Früher oder später werden Sie sich fragen, mit welcher Art von Klasse Sie es zu tun haben, besser, wenn Sie dies zuerst tun.Sie sollten diese Kategorie besser verwenden:
quelle
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end
Als Kombination aus Marc's und Kyles Antwort.Ich sage das:
Das Problem ist, dass diese Funktion niemals aufgerufen wird, wenn self null ist. Es wird false zurückgegeben, was erwünscht ist.
quelle
-(BOOL)isEmpty{ return ![self isNotEmpty]}
die Kategorie nicht funktioniert.condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Früher oder später werden Sie sich fragen, mit welcher Art von Klasse Sie es zu tun haben, besser, wenn Sie dies zuerst tun.Eine andere Möglichkeit besteht darin, zu überprüfen, ob es
@""
mitisEqualToString:
like so gleich ist:quelle
Übergeben Sie einfach Ihren String an folgende Methode:
quelle
Verwenden Sie einfach eine der folgenden
if
else
Bedingungen:Methode 1:
Methode 2:
quelle
Schnelle Version
Obwohl dies eine objektive C-Frage ist, musste ich sie
NSString
in Swift verwenden, damit ich hier auch eine Antwort einfügen kann.Oder wenn
NSString
ist eine Option:Die normale Swift-
String
Version istSiehe auch: Leere Zeichenfolge in Swift prüfen?
quelle
Vielleicht ist diese Antwort das Duplikat der bereits gegebenen Antworten, aber ich habe nur wenige Modifikationen und Änderungen in der Reihenfolge der Überprüfung der Bedingungen vorgenommen. Bitte beachten Sie den folgenden Code:
quelle
Mit dieser Methode können Sie überprüfen, ob Ihre Zeichenfolge leer ist oder nicht:
Es wird empfohlen, eine gemeinsam genutzte Klasse UtilityClass zu verwenden und diese Methode hinzuzufügen, damit Sie diese Methode verwenden können, indem Sie sie einfach in Ihrer Anwendung aufrufen.
quelle
Sie haben zwei Methoden, um zu überprüfen, ob die Zeichenfolge leer ist oder nicht:
Angenommen, Ihr String-Name lautet
NSString *strIsEmpty
.Methode 1:
Methode 2:
Wählen Sie eine der oben genannten Methoden und erfahren Sie, ob die Zeichenfolge leer ist oder nicht.
quelle
Überprüfen Sie einfach Ihre Saitenlänge
Eine Nachricht an NIL gibt nil oder 0 zurück, sodass Sie nicht auf nil testen müssen :).
Viel Spaß beim Codieren ...
quelle
Es wirkt als Zauber für mich
Wenn das
NSString
ists
quelle
Abgesehen von dem Grundkonzept der Überprüfung auf eine Zeichenfolgenlänge von weniger als 1 ist es daher wichtig, den Kontext gründlich zu berücksichtigen. Sprachen, die menschlich oder computergestützt sind oder auf andere Weise unterschiedliche Definitionen für leere Zeichenfolgen haben, und innerhalb derselben Sprachen kann ein zusätzlicher Kontext die Bedeutung weiter ändern.
Angenommen, eine leere Zeichenfolge bedeutet "eine Zeichenfolge, die im aktuellen Kontext keine signifikanten Zeichen enthält".
Dies kann visuell bedeuten, da Farbe und Hintergrundfarbe in einer zugeordneten Zeichenfolge gleich sind. Effektiv leer.
Dies könnte bedeuten, dass keine aussagekräftigen Zeichen mehr vorhanden sind. Alle Punkte oder alle Striche oder alle Unterstriche können als leer betrachtet werden. Darüber hinaus kann ein Leerzeichen ohne aussagekräftige signifikante Zeichen eine Zeichenfolge bedeuten, die keine Zeichen enthält, die der Leser versteht. Dies können Zeichen in einer Sprache oder einem Zeichensatz sein, die für den Leser als bedeutungslos definiert sind. Wir könnten es etwas anders definieren, zu sagen, dass die Zeichenfolge in einer bestimmten Sprache keine bekannten Wörter bildet.
Wir könnten sagen, leer ist eine Funktion des Prozentsatzes des negativen Raums in den gerenderten Glyphen.
Selbst eine Folge nicht druckbarer Zeichen ohne allgemeine visuelle Darstellung ist nicht wirklich leer. Steuerzeichen kommen mir in den Sinn. Besonders der niedrige ASCII-Bereich (ich bin überrascht, dass niemand diese erwähnt hat, da sie viele Systeme abspritzen und keine Leerzeichen sind, da sie normalerweise keine Glyphen und keine visuellen Metriken haben). Die Stringlänge ist jedoch nicht Null.
Fazit. Länge allein ist hier nicht das einzige Maß. Die kontextbezogene Mitgliedschaft ist auch ziemlich wichtig.
Die Mitgliedschaft im Zeichensatz ist eine sehr wichtige allgemeine zusätzliche Maßnahme. Sinnvolle Sequenzen sind auch ziemlich häufig. (Denken Sie an SETI oder Krypto oder Captchas.) Es gibt auch weitere abstraktere Kontextsätze.
Überlegen Sie also genau, bevor Sie davon ausgehen, dass eine Zeichenfolge nur aufgrund der Länge oder des Leerzeichens leer ist.
quelle
Sehr nützlicher Beitrag, um NSDictionary-Unterstützung sowie eine kleine Änderung hinzuzufügen
quelle
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Früher oder später werden Sie sich fragen, mit welcher Art von Klasse Sie es zu tun haben, besser, wenn Sie dies zuerst tun.quelle
stringByStrippingWhitespace
Der beste Weg ist, die Kategorie zu verwenden.
Sie können die folgende Funktion überprüfen. Welches hat alle Bedingungen zu überprüfen.
quelle
In jedem Fall ist es am besten, die Länge der angegebenen Zeichenfolge zu überprüfen. Wenn Ihre Zeichenfolge myString ist, lautet der Code:
quelle
quelle
Überprüfen Sie dies :
Oder
Hoffe das wird helfen.
quelle
Sie können leicht überprüfen, ob die Zeichenfolge leer ist:
quelle
Ich habe eine leere Zeichenfolge mit dem folgenden Code überprüft:
quelle
Es ist so einfach wie
if([myString isEqual:@""])
oderif([myString isEqualToString:@""])
quelle
quelle
Sie können eine leere Zeichenfolge auf zwei Arten haben:
1) @ "" // Enthält kein Leerzeichen
2) @ "" // Platz enthalten
Technisch gesehen sind beide Saiten leer. Wir können beide Dinge nur mit EINER Bedingung schreiben
quelle
Versuche Folgendes
quelle
quelle
str.length
löst eine Ausnahme aus, wennstr
null ist.quelle