2014-03-12 3 views
0

У меня есть следующая строка в прошивкой: -Получение подстроки из строки ios?

[{ "Статус": "0", "EventID": "126"}] 15.511563,73.809732 [{ "Статус": "0"}]

И я пытаюсь принести это: -

[{ "статус": "0", "EventID": "126"}]

т.е. всей части строки перед первым ] закрывающий кронштейн.

Я пробовал это, в котором я получаю подстроку из 31 символа, но это не сработает, если содержимое между скобками изменится.

NSRange start = [result1 rangeOfString:@"["]; 

NSString *shortString =[result1 substringWithRange:NSMakeRange(start.location, 31)]; 

result1 = [result1 substringToIndex:shortString.length]; 
NSLog(@"Response- %@",result1); 

Каков правильный подход?

+0

Если вы получаете [{"status": "0", "eventid": "126"}] 15.511563,73.809732 [{"status": "0"}] от сервера сообщите им, чтобы сделать это как ({"status": "0", "eventid": "126"}] 15.511563,73.809732 [{"status": "0"}), потому что "(" ")" ссылается на массив. –

ответ

1

Так же, как вы получаете диапазон запуска (NSRange start = [result1 rangeOfString:@"["];), а также получить диапазон торцевую:

NSRange end = [result1 rangeOfString:@"]"]; 

Теперь у вас есть достаточно информации, чтобы извлечь подстроку:

NSString *result = [result1 substringWithRange:NSMakeRange(start.location, end.location - start.location)]; 

В текущем коде , вам не нужно использовать методы substring... дважды, так как вы уже извлекли нужную строку при первом вызове. Выполнение второго вызова - это просто игнорирование бит кода, который нашел начальное местоположение, и предполагая, что вы всегда хотите, чтобы подстрока начиналась с начала, что менее гибко.

0

Вы можете попробовать с помощью NSRegularExpression:

NSError *error = NULL; 
NSRegularExpression *regex = 
    [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" 
     options:NSRegularExpressionCaseInsensitive 
      error:&error]; 

Теперь поиск первого матча:

NSString *string = @"[{\"status\":\"0\",\"eventid\":\"126\"}]15.511563,73.809732[{\"status\":\"0\"}]"; 
NSTextCheckingResult *match = 
    [regex firstMatchInString:string 
         options:0 
         range:NSMakeRange(0, [string length])]; 

Теперь вы можете получить диапазон для группы захвата:

NSRange block = [match rangeAtIndex:1]; 
1

Сделать диапазон END также

NSRange start; 
NSRange end; 
start = [result1 rangeOfString: @"["]; 
end = [result1 rangeOfString: @"]"]; 

NSString *newResult = [result1 substringWithRange:NSMakeRange(start.location+1, end.location)]; 

NSLog(@"%@", newResult); 
Смежные вопросы