我在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 :(得分: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];