从字符串ios获取subString?

时间:2014-03-12 12:40:53

标签: ios nsstring substring

我在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);

什么是正确的方法?

3 个答案:

答案 0 :(得分:1)

就像你获得起始范围(NSRange start = [result1 rangeOfString:@"["];)一样,也得到结束范围:

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

现在您有足够的信息来提取子字符串:

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

在当前代码中,您不需要使用substring...方法两次,因为您已经在第一次调用中提取了所需的字符串。进行第二次调用只是忽略了找到起始位置的代码位,并假设你总是希望从字符串的开头得到子字符串,这样灵活性较差。

答案 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);

答案 2 :(得分: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];