Domanda IOS: NSString che recupera una sottostringa da una stringa


Ehi, 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.

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

Quello che voglio estrarre è da id =% alla prossima%.

Qualche idea?


19
2018-01-18 14:50


origine


risposte:


Usa 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 il substringWithRange:, substringFromIndex: e substringToIndex: metodi per ottenere i bit che vuoi Ecco una soluzione al tuo 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 dei parametri di query da un URL, che potrebbe essere più utile se devi farlo 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 puoi farlo con

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

O con qualcosa di simile

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

AGGIORNARE: A partire da iOS 8+ c'è una classe integrata chiamata NSURLComponents che può analizzare automaticamente i parametri di query per te (NSURLComponents è disponibile su iOS 7+, ma la funzione di parsing dei parametri di query non lo è).


71
2018-01-18 15:02



Prova questo

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

NSString * day = [foo objectAtIndex: 0];


3
2017-12-19 09:32