2010-03-04 8 views
12

He buscado durante horas y no he encontrado una solución para mi problema. Tengo un NSString que se parece a lo siguiente:Posición de un carácter en NSSumber o NSMutableString

"espaciador": [ "valor1", "valor2"], "espaciador": [ "valor1", "valor2"], ...

Lo que quiero hacer es eliminar los caracteres [] de la cadena. Parece ser imposible con objetivo-c. La mayoría de los otros lenguajes de programación ofrecen funciones como strpos o indexOf que me permiten buscar un carácter o cadena y ubicar su posición. Pero parece que nada es así en Objective-c.

¿Alguien tiene una idea sobre cómo eliminar estos caracteres? Además, hay [] caracteres de la cadena que deben permanecer, por lo que no se puede simplemente usar NSMutableString stringByReplacingOccurencesOfString: withString. Necesito buscar primero la cadena espaciadora y luego eliminar solo los siguientes dos caracteres [].

Gracias por ayudarme.

Respuesta

22

Para encontrar ocurrencias de una cadena dentro de una cadena, utilice los métodos rangeOfXXX en la clase NSString. A continuación, se puede construir NSRanges para extraer subcadenas, etc.

En este ejemplo se elimina sólo el primer conjunto de corchetes de apertura/cierre en su cadena de muestra ...

NSString *original = @"\"spacer\": \[\"value1\", \"value2\"], \"spacer\": \[\"value1\", \"value2\"]"; 
NSLog(@"%@", original); 

NSRange startRange = [original rangeOfString:@"\["]; 
NSRange endRange = [original rangeOfString:@"]"]; 

NSRange searchRange = NSMakeRange(0, endRange.location); 
NSString *noBrackets = [original stringByReplacingOccurrencesOfString:@"\[" withString:@"" options:0 range:searchRange]; 
noBrackets = [noBrackets stringByReplacingOccurrencesOfString:@"]" withString:@"" options:0 range:searchRange]; 
NSLog(@"{%@}", noBrackets); 

El String Programming Guide tiene más detalles.
Es posible alternativamente también ser capaz de utilizar la clase NSScanner.

4

Esto funcionó para mí para extraer todo para el índice de un personaje, en este caso '[':

NSString *original = @"\"spacer\": \[\"value1\", \"value2\"], \"spacer\": \[\"value1\", \"value2\"]"; 
NSRange range = [original rangeOfString:@"\["]; 
NSString *toBracket = [NSString stringWithString :[original substringToIndex:range.location] ]; 
NSLog(@"toBracket: %@", toBracket); 
Cuestiones relacionadas