2010-08-17 10 views
29

Mam problem, którego nie mogę wymyślić.Pytanie NSString - metoda rangeOfString

Próbuję uruchomić metodę rangeOfString na łańcuchu i nie wiem, jak ustalić, czy nie znaleziono ciągu. Na przykład:

NSRange range = [@"abc" rangeOfString:@"d" options:NSCaseInsensitiveSearch range:NSMakeRange(0,3)]; 

Najwyraźniej "d" nie jest zawarte w ciągu znaków "abc". Chciałbym móc to zrobić:

if(the range is empty since "d" is not in "abc") 
    //do something 

Jaki jest kod?

Dzięki!

Odpowiedz

68

Z dokumentacji NSString

-[NSString rangeOfString] 

Return Value

Struktura NSRange podając lokalizację i długość w odbiorniku pierwszego wystąpienia aString. Zwraca {NSNotFound, 0} jeśli aString jest nie znaleziony lub jest pusty (@ "").

Tak to wygląda:

if ([@"abc" rangeOfString:@"d"].location == NSNotFound){ 
    //Do something 

Czy Apple zatwierdzony sposób.

EDIT:

zrobiłem literówkę naprawdę złe, naprawić go, dzięki Kalle.

+2

Chcesz dwa identyczne znaki tam. – Kalle

+0

Czy to oznacza, że ​​sprawdzanie długości nie jest "zatwierdzone przez Apple"? ;-) –

+0

Nie wiem. I w każdym razie, tylko dlatego, że nie zostało to zatwierdzone przez Apple, nie robi tego źle (patrz: Odrzucanie App Store) –

13

Sprawdź długość długości zakresu. Jeśli jest niezerowy, został znaleziony.

+0

Z komentarzy w NSString.h: "Te metody zwracają długość == 0, jeśli nie znaleziono docelowego ciągu znaków". Preferuję to podejście, ponieważ NSNotFound to #define NSIntegerMax, a jego wartość zmienia się w zależności od środowiska wykonawczego (np. 32 vs 64-bit). – nobre

+0

Sprawdź, czy długość jest lepsza. W przypadku, gdy odbiornik jest zerowy, długość i położenie są zwracane jako 0. – Dare2Dream