Jak sprawdzić, czy NSString
w Objective-C jest pusty?
ios
objective-c
nsstring
Jamey McElveen
źródło
źródło
@"\u200B"
(składający się tylko ze znaku Unicode ZERO WIDTH SPACE . Wydrukowanie go spowoduje wydrukowanie 0 znaków (zweryfikuj za pomocą czcionki o stałej szerokości), ale string.length da 1. Istnieją inne znaki Unicode (takie jak CHARACTER WYMIANY OBIEKTU ), które zachowują się podobnie. Możesz uzyskaj to drugie podczas analizowania tekstu PDFZERO WIDTH SPACE
jest, tak naprawdę nie ma znaczenia, ponieważ@"\u200B"
jest to jednak znak, więc jeśli przetestujesz, czy łańcuch jest pusty, powie, że nie jest tak, ponieważ jest w nim znak. Po prostu nie można go wydrukować zgodnie ze standardem Unicode.![string length]
. Wydaje się bardziej czysty.Odpowiedź Marca jest poprawna. Ale skorzystam z okazji, aby dołączyć wskaźnik do uogólnionego Wila Shipleya
isEmpty
, który udostępnił na swoim blogu :źródło
-isNotEmpty
:)Pierwsze podejście jest poprawne, ale nie działa, jeśli łańcuch zawiera puste spacje (
@" "
). Więc musisz wyczyścić te białe przestrzenie przed przetestowaniem.Ten kod usuwa wszystkie puste spacje po obu stronach łańcucha:
Jednym dobrym pomysłem jest utworzenie jednego makra, więc nie musisz wpisywać tej linii potworów:
Teraz możesz użyć:
źródło
NSString
kategoria dodała nazwaną metodę,trimmedString
która robi dokładnie to, co napisałeś.whitespaceCharacterSet
nie zawiera nowych linii! Oto kategoria, którą napisałem, w tymtrim
kilka innych przydatnych metod: github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/...Jednym z najlepszych rozwiązań, jakie kiedykolwiek widziałem (lepszym niż Matt G), jest ta ulepszona funkcja wbudowana, którą wybrałem w niektórych repozytoriach Git Hub (jedno Wil Wadley, ale nie mogę znaleźć linku):
źródło
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Wcześniej czy później będziesz pytał, z jaką klasą masz do czynienia, lepiej zrobić to za pierwszym razem.Lepiej skorzystaj z tej kategorii:
źródło
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end
jako kombinacja odpowiedzi Marca i Kyle'a.Kładę to:
Problem polega na tym, że jeśli self jest zero, funkcja ta nigdy nie jest wywoływana. Zwróci false, co jest pożądane.
źródło
-(BOOL)isEmpty{ return ![self isNotEmpty]}
że nie działa na kategorię.condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Wcześniej czy później będziesz pytał, z jaką klasą masz do czynienia, lepiej zrobić to za pierwszym razem.Inną opcją jest sprawdzenie, czy jest równe
@""
zisEqualToString:
podobnym:źródło
Po prostu przekaż swój ciąg do następującej metody:
źródło
Wystarczy użyć jednego z poniższych
if
else
warunków:Metoda 1:
Metoda 2:
źródło
Szybka wersja
Mimo że jest to pytanie Celu C, musiałem użyć go
NSString
w Swift, więc w tym miejscu również zamieszczę odpowiedź.Lub jeśli
NSString
jest opcjonalny:Normalna
String
wersja Swift toZobacz także: Sprawdź pusty ciąg znaków w Swift?
źródło
Być może ta odpowiedź jest duplikatem już udzielonych odpowiedzi, ale zrobiłem kilka modyfikacji i zmian w kolejności sprawdzania warunków. Proszę odnieść się do poniższego kodu:
źródło
Za pomocą tej metody możesz sprawdzić, czy Twój łańcuch jest pusty, czy nie.
Najlepszą praktyką jest, aby wspólna klasa mówiła UtilityClass i reklamowała tę metodę, abyś mógł skorzystać z tej metody, po prostu wywołując ją w aplikacji.
źródło
Masz 2 metody sprawdzenia, czy ciąg jest pusty, czy nie:
Załóżmy, że twoja nazwa łańcucha to
NSString *strIsEmpty
.Metoda 1:
Metoda 2:
Wybierz dowolną z powyższych metod i dowiedz się, czy ciąg znaków jest pusty, czy nie.
źródło
Wystarczy sprawdzić długość sznurka
wiadomość do NIL zwróci zero lub 0, więc nie ma potrzeby testowania na zero :).
Miłego kodowania ...
źródło
Działa jak dla mnie urok
Jeśli tak
NSString
jests
źródło
Poza podstawową koncepcją sprawdzania długości łańcucha mniejszej niż 1, ważne jest głębokie rozważenie kontekstu. Języki ludzkie lub komputerowe lub w inny sposób mogą mieć różne definicje pustych ciągów znaków i w tych samych językach dodatkowy kontekst może dodatkowo zmienić znaczenie.
Powiedzmy, że pusty ciąg oznacza „ciąg, który nie zawiera żadnych znaczących znaków w bieżącym kontekście”.
Może to oznaczać wizualnie, ponieważ kolor i kolor tła są takie same w przypisywanym ciągu. Skutecznie pusty.
Może to oznaczać brak znaczących znaków. Wszystkie kropki, wszystkie myślniki lub wszystkie podkreślenia można uznać za puste. Ponadto brak znaczących znaczących znaków może oznaczać ciąg, który nie zawiera znaków, które czytelnik rozumie. Mogą to być znaki w języku lub zestawie znaków zdefiniowane jako nieistotne dla czytelnika. Moglibyśmy zdefiniować to nieco inaczej, mówiąc, że ciąg znaków nie zna znanych słów w danym języku.
Można powiedzieć, że pusty jest funkcją procentu ujemnej przestrzeni w renderowanych glifach.
Nawet ciąg znaków niedrukowalnych bez ogólnej reprezentacji wizualnej nie jest naprawdę pusty. Przychodzą mi na myśl postacie kontrolne. Zwłaszcza niski zakres ASCII (dziwię się, że nikt nie wspomniał o nich, ponieważ łączą wiele systemów i nie są spacjami, ponieważ zwykle nie mają glifów ani wskaźników wizualnych). Jednak długość łańcucha nie jest równa zero.
Wniosek. Sama długość nie jest tu jedyną miarą. Przynależność do zestawu kontekstowego jest również bardzo ważna.
Członkostwo w zestawie znaków jest bardzo ważnym wspólnym dodatkowym środkiem. Znaczące sekwencje są również dość powszechne. (pomyśl SETI lub krypto lub captchas) Istnieją również dodatkowe abstrakcyjne zestawy kontekstów.
Zastanów się więc, zanim łańcuch będzie pusty tylko na podstawie długości lub białych znaków.
źródło
Bardzo przydatny post, aby dodać obsługę NSDictionary, a także jedną małą zmianę
źródło
condenseToSingleNSData(id thing)
?expandToNSArray(id thing)
? Wcześniej czy później będziesz pytał, z jaką klasą masz do czynienia, lepiej zrobić to za pierwszym razem.źródło
stringByStrippingWhitespace
Najlepszym sposobem jest użycie kategorii.
Możesz sprawdzić następującą funkcję. Który ma wszystkie warunki do sprawdzenia.
źródło
W każdym przypadku najlepszym sposobem jest sprawdzenie długości podanego ciągu. W tym przypadku, jeśli ciąg ma ciąg myString, kod jest następujący:
źródło
źródło
Sprawdź to :
Lub
Mam nadzieję, że to pomoże.
źródło
Za pomocą tego możesz łatwo sprawdzić, czy ciąg znaków jest pusty:
źródło
Sprawdziłem pusty ciąg za pomocą poniższego kodu:
źródło
To tak proste jak
if([myString isEqual:@""])
lubif([myString isEqualToString:@""])
źródło
źródło
Możesz mieć pusty ciąg na dwa sposoby:
1) @ "" // Nie zawiera spacji
2) @ "" // Zawiera spację
Technicznie oba ciągi są puste. Obie rzeczy możemy napisać tylko za pomocą JEDNEGO warunku
źródło
Spróbuj wykonać następujące czynności
źródło
źródło
str.length
wyrzuci wyjątek, jeślistr
jest pusty.źródło