2012-01-18 12 views
19

Hej szukam sposobu na wyodrębnienie ciągu znaków z innego ciągu. Może być dowolnej długości i znajdować się w dowolnej części łańcucha, więc zwykłe metody nie działają.IOS: NSString pobieranie podciągu z ciągu

Na przykład http://bla.com/bla?id=%1234%&something=%888%

Co chcę wyodrębnić jest z id =% do następnego%.

Każdy pomysł?

+1

[http://stackoverflow.com/questions/8484826/retrieving-particular-lines-of-text-from-string-memory-management-issues][1] [1] : http://stackoverflow.com/questions/8484826/retrieving-particular-lines-of-text-from-string-memory-management-issues To było moje pytanie .. podążaj za nim – Shubhank

+0

sprawdź ten link. jest prosty i użyteczny. http://stackoverflow.com/a/5806879/1635315 – iKT

Odpowiedz

71

Użyj metody rangeOfString:

NSRange range = [string rangeOfString:@"id=%"]; 
if (range.location != NSNotFound) 
{ 
    //range.location is start of substring 
    //range.length is length of substring 
} 

Można następnie posiekać ciąg używając substringWithRange:, substringFromIndex: i substringToIndex: metod, aby uzyskać bity chcesz. Oto rozwiązanie konkretnego problemu:

NSString *param = nil; 
NSRange start = [string rangeOfString:@"id=%"]; 
if (start.location != NSNotFound) 
{ 
    param = [string substringFromIndex:start.location + start.length]; 
    NSRange end = [param rangeOfString:@"%"]; 
    if (end.location != NSNotFound) 
    { 
     param = [param substringToIndex:end.location]; 
    } 
} 

//param now contains your value (or nil if not found) 

Alternatywnie, oto rozwiązanie ogólne dla wydobywania parametry zapytania z adresu URL, który może być bardziej przydatna, gdy trzeba zrobić to kilka razy:

- (NSDictionary *)URLQueryParameters:(NSURL *)URL 
{ 
    NSString *queryString = [URL query]; 
    NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
    NSArray *parameters = [queryString componentsSeparatedByString:@"&"]; 
    for (NSString *parameter in parameters) 
    { 
     NSArray *parts = [parameter componentsSeparatedByString:@"="]; 
     if ([parts count] > 1) 
     { 
      NSString *key = [parts[0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
      NSString *value = [parts[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
      result[key] = value; 
     } 
    } 
    return result; 
} 

to nie pozbawić% znaków od wartości, ale można to zrobić albo z

NSString *value = [[value substringToIndex:[value length] - 1] substringFromIndex:1]; 

albo coś podobnego

NSString *value = [value stringByReplacingOccurencesOfString:@"%" withString:@""]; 

UPDATE: W iOS 8+ tam wbudowany w klasie o nazwie NSURLComponents że może automatycznie analizować parametry zapytań dla Ciebie (NSURLComponents jest dostępny na iOS 7+, ale parametr zapytania analizowania funkcji ISN "t).

+0

Funkcja URLQueryParameters działa doskonale! dzięki – youssman

3

Spróbuj

NSArray * xxx = [@ "10/04/2011" componentsSeparatedByString: @ "/"];

NSString * dzień = [foo objectAtIndex: 0];

Powiązane problemy