2014-10-11 93 views
0

我希望得到一些帮助来拆分我的一个NSString值。考虑以下以下:基于数值的NSString拆分字符串

NSString *string = @"_o_t_d_n__"; 

基本上,我想段此NSString *string以上到3个独立的字符串值的基础上,数字定界符下面它们被存储在一个NSArray:

NSArray *values = [NSArray arrayWithObjects: @3, @2, @5]; 

哪个会那么造成以下,基于这些分隔符值:

3 = @"_o_" 
2 = @"t_" 
6 = @"d_n__" 

什么会通过这个数组分割循环最好的方法基于数组中包含的数值的字符串?

回答

3

试试这个:

NSArray *array = @[@(3),@(2),@(5)]; 
NSUInteger loc = 0; 
for (int i = 0; i < [array count]; i++) { 
    NSUInteger len = [[array objectAtIndex:i] unsignedIntegerValue]; 
    NSString *subStr = [string substringWithRange:NSMakeRange(loc, len)]; 
    loc += len; 
} 

如果你想通过的NSString环路,做一个字符指针,这比第一种方法稍快。

NSString *string = @"_o_t_d_n__"; 
const char *c = [string cStringUsingEncoding:NSUTF8StringEncoding]; 
char *myData = calloc(3, 1); 
for (int i = 0, j = 0; i < [string length]; i++, j++) { 
    myData[j] = c[i]; 
    if (i == 2 || i == 4 || i == 9) { 
     NSString *string = [[NSString alloc] initWithBytes:myData length:sizeof(myData) encoding:NSUTF8StringEncoding]; 
     NSLog(@"%@",string); 
     if (i == 2) myData = realloc(myData, 2); 
     if (i == 4) myData = realloc(myData, 5); 
     j = -1; 
    } 
} 
free(myData); 
+0

谢谢。当然会让我更清楚。我可以通过循环以某种方式做到这一点吗? – Maff 2014-10-11 05:57:25

+0

现货伴侣。非常感激! – Maff 2014-10-11 08:17:39

0

我会使用正则表达式来做到这一点。下面是我该怎么做:

let string = "_o_t_d_n__" 
let first = 3 
let second = 2 
let third = 5 
let expression = NSRegularExpression.regularExpressionWithPattern("([a-z]{\(first)})([a-z]{\(second)})([a-z]{\(third),})", options: nil, error: nil) 
let range = NSMakeRange(0, string.length) 
expression.enumerateMatchesInString(string, options: nil, range: range, usingBlock:{ (result, MatchingFlags, unsafePointer) in 
     let firstResult = string.substringWithRange(result.rangeAtIndex(1)) 
     let secondResult = string.substringWithRange(result.rangeAtIndex(2)) 
     let thirdResult = string.substringWithRange(result.rangeAtIndex(3)) 
}) 

需要额外的验证检查,但这是基本的想法。

+0

顺便说一下,这是SWIFT代码。 Objective-c是一样的。 – 2014-10-11 05:40:26