2012-01-18 20 views
19

Hey, sto cercando un modo per estrarre una stringa da un'altra stringa. Potrebbe essere qualsiasi lunghezza ed essere in qualsiasi parte della stringa in modo che i metodi usuali non funzionino.IOS: NSString che recupera una sottostringa da una stringa

Per esempio http://bla.com/bla?id=%1234%&something=%888%

Quello che voglio estrarre da id =% a quello successivo%.

Qualche idea?

+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 questa era la mia domanda .. seguirlo – Shubhank

+0

controllare questo collegamento. è semplice e utile. http://stackoverflow.com/a/5806879/1635315 – iKT

risposta

71

utilizzare il metodo rangeOfString:

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

È quindi possibile tagliare la stringa utilizzando le substringWithRange:, substringFromIndex: e substringToIndex: metodi per ottenere i bit che si desidera. Ecco una soluzione al vostro problema specifico:

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) 

In alternativa, ecco una soluzione generale per l'estrazione di parametri di query da un URL, che può essere più utile se avete bisogno di fare questo più volte:

- (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; 
} 

Questo non elimina i caratteri% dai valori, ma si può fare neppure con

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

o con qualcosa di simile

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

UPDATE: Come di iOS 8+ theres un built-in classe chiamata NSURLComponents in grado di analizzare automaticamente i parametri di query per voi (NSURLComponents è disponibile su iOS 7+, ma il parametro di query parsing caratteristica isn 't).

+0

La funzione URLQueryParameters funziona perfettamente! grazie – youssman

3

Prova questo

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

NSString * day = [foo objectAtIndex: 0];

Problemi correlati