2014-03-12 100 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); 
相關問題