2014-03-12 73 views
0

我有在IOS一个以下字符串: -从字符串ios获取子字符串?

[{ “状态”: “0”, “事件ID”: “126”}] 15.511563,73.809732 [{ “状态”: “0”}]

,我试图获取此: -

[{ “状态”: “0”, “事件ID”: “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); 
相关问题