Obj-c将长字符串转换为多维数组

时间:2012-10-28 19:46:11

标签: ios

我有一个很长的NSString,比如“t00010000t00020000t00030000”等等。我需要把它分成每个“t0001000”。

我正在使用......

NSArray * tileData = [[GameP objectForKey:@“map”] componentsSeparatedByString:@“t”];

然后把它分开,但是“t”丢失了,我需要(虽然我想我可以把它重新加上)。我想的另一种方法是通过计算8个字符来分割它,虽然不知道该怎么做。

但理想情况下我需要将它拆分为[] []类型数组,这样我就可以使用类似的东西来获取每个位...

NSString tile = [[tileData objectAtIndex:i] objectAtIndex:j]];

我是obj-c的新手,所以感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果他们不严格分隔各个部分的t字符,i。即部件总是 8个字符,然后很容易做到:

NSString *string = @"t00010000t00020000t00030000";
NSMutableArray *arr = [NSMutableArray array];
int i;
for (i = 0; i < string.length; i += 8) {
    [arr addObject:[string substringWithRange:NSMakeRange(i, 8)]];
}

此处arr将包含8个字符的子字符串。

编辑:所以让我也为多维解决方案提供另一种解决方案。当然,@ KevinH的角色解决方案非常优雅,但如果你需要一个NSString并且你不介意实现另一种方法,那么添加这样的东西相当容易:

@implementation NSString (EightCarAdditions)

- (NSString *)charAsStringInSection:(NSInteger)section index:(NSInteger)index
{
    return [self substringWithRange:NSMakeRange(section * 8 + index, 1)];
}

- (unichar)charInSection:(NSInteger)section index:(NSInteger)index
{
    return [self characterAtIndex:section * 8 + index];
}

@end

(注意characterAtIndex返回unichar a char - 准备超过1个字节的UTF-(8,16, 32)东西。)然后你可以在NSString本身调用这些方法,所以非常方便:

unichar ch = [string charInSection:1 index:3];

答案 1 :(得分:1)

H2CO3的答案是第一部分。对于第二个(多维数组),如果我理解你想要什么,你不需要另一个数组用于单个字符。对于数组中的每个NSString,您可以通过调用characterAtIndex来访问每个字符。所以,扩展上面的例子:

for (NSString *item in arr) {
    NSLog(@"The fifth character of this string is: %C", [item characterAtIndex:4]);
}

如果您希望将这些链接在一起,就像在您的示例中一样,您也可以这样做:

NSLog(@"The fifth character of the fourth string is: %C",
    [[arr objectAtIndex:3] characterAtIndex:4]);