Czy ktoś może wskazać mi jakiekolwiek zasoby dotyczące porównania bez rozróżniania wielkości liter w celu C? Wydaje się, że nie ma metody równoważnej dostr1.equalsIgnoreCase(str2)
ios
objective-c
cocoa-touch
nsstring
Tejaswi Yerukalapudi
źródło
źródło
@"Some String"
zostanie odebrane z innego połączenia i tak się stanienil
,if
podasztrue
jako, że wysłaniecaseInsensitiveCompare
nanil
jest ważne i skutkuje innym,nil
który w naszym przypadku w porównaniu zNSOrderedSame
powrócitrue
(NSOrderedSame
jest zdefiniowany jako 0). Może to być źródłem dość niszczycielskich błędów, tak jak w moim przypadku. Twoje zdrowie!NSString
która zwraca wartość logiczną. Następnie, jeśli ciąg otrzymujący jestnil
, metoda jako całość zwracaNO
.Uwaga:
stringA &&
wymagane jest, bo gdystringA
jestnil
:i tak się dzieje
NSOrderedSame
jest również zdefiniowany jako0
.Poniższy przykład to typowa pułapka:
źródło
Alternatywą, jeśli chcesz mieć większą kontrolę niż tylko rozróżnianie wielkości liter, jest:
Wyszukiwanie numeryczne i niewrażliwość na znaki diakrytyczne to dwie przydatne opcje.
źródło
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
Zawsze możesz upewnić się, że są w tym samym przypadku przed porównaniem:
Główną korzyścią jest unikanie potencjalnego problemu opisanego przez matm dotyczącego porównywania ciągów zerowych. Możesz albo sprawdzić, czy łańcuch nie jest zerowy przed wykonaniem jednej z
compare:options:
metod, albo możesz być leniwy (jak ja) i zignorować dodatkowy koszt tworzenia nowego łańcucha dla każdego porównania (co jest minimalne, jeśli robisz tylko jedną lub dwa porównania).źródło
caseInsensitiveCompare
), Zawsze używaj tego.źródło
Nowy sposób na zrobienie tego. iOS 8
źródło
true
„Café” i „É”, to zdecydowanie NIE jest poprawna odpowiedź.Wypróbuj tę metodę
źródło
Konwersja odpowiedzi Jasona Coco na Swift dla głęboko leniwych :)
źródło
aby sprawdzić z prefiksem jak w iPhone ContactApp
ten blog był dla mnie przydatny
źródło
Alternatywne rozwiązanie dla szybkiego:
Aby zrobić zarówno UpperCase:
na przykład:
lub zrobić zarówno LowerCase:
na przykład:
źródło
Na macOS możesz po prostu użyć
-[NSString isCaseInsensitiveLike:]
, który zwracaBOOL
tak jak-isEqual:
.źródło
źródło