2012-01-18 11 views
19

Hola Estoy buscando una forma de extraer una cadena de otra cadena. Puede ser de cualquier longitud y estar en cualquier parte de la cadena, por lo que los métodos habituales no funcionan.IOS: NSString recuperando una subcadena de una cadena

Por ejemplo http://bla.com/bla?id=%1234%&something=%888%

Lo que quiero es extraer a partir de id =% al siguiente%.

¿Alguna 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 esto era mi pregunta .. seguirlo – Shubhank

+0

verificación de este enlace. es simple y útil. http://stackoverflow.com/a/5806879/1635315 – iKT

Respuesta

71

utilizar el método de rangeOfString:

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

Luego, puede picar la cadena mediante los substringWithRange:, substringFromIndex: y substringToIndex: métodos para obtener las partes que usted quiera. Aquí hay una solución a su problema específico:

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) 

Alternativamente, he aquí una solución general para la extracción de los parámetros de consulta de una URL, que puede ser más útil si se tiene que hacer esto varias veces:

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

esto no elimina los caracteres% de los valores, pero se puede hacer que sea con

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

O con algo como

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

ACTUALIZACIÓN: A partir de IOS 8+ theres una clase incorporada llamada NSURLComponents que puede analizar automáticamente los parámetros de consulta para usted (NSURLComponents está disponible en iOS 7+, pero el parámetro de consulta de análisis ISN función 't).

+0

¡La función URLQueryParameters funciona perfectamente! Gracias – youssman

3

Prueba este

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

NSString * día = [foo objectAtIndex: 0];

Cuestiones relacionadas