0

我有一个很长的 NSString,比如“t00010000t00020000t00030000”等等。我需要将其拆分为每个“t0001000”。

我在用着...

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

它把它分开了,但是我需要的“t”不见了(尽管我想我可以把它附加回来)。我猜另一种方法是通过计算 8 个字符来拆分它,尽管不知道该怎么做。

但理想情况下,我需要将它拆分为 [][] 类型的数组,这样我就可以使用类似...

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

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

4

2 回答 2

1

如果它们不是严格分隔部分的t字符,即部分总是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返回 aunichar不是a char- 为超过 1 字节宽的 UTF-(8, 16, 32) 内容做好准备。)然后您可以在 NSString 本身上调用这些方法,因此非常方便:

unichar ch = [string charInSection:1 index:3];
于 2012-10-28T19:55:24.077 回答
1

H2CO3's answer is spot-on for the first part. For the second (the multi-dimensional array), if I understand what you want, you don't need another array for the individual characters. For each NSString in the array, you can access each character by calling characterAtIndex. So, extending the example above:

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

And if you're looking to chain these together, as in your example, you can do that too:

NSLog(@"The fifth character of the fourth string is: %C",
    [[arr objectAtIndex:3] characterAtIndex:4]);
于 2012-10-28T20:05:21.937 回答