我有一个很长的NSString,比如“t00010000t00020000t00030000”等等。我需要把它分成每个“t0001000”。
我正在使用......
NSArray * tileData = [[GameP objectForKey:@“map”] componentsSeparatedByString:@“t”];
然后把它分开,但是“t”丢失了,我需要(虽然我想我可以把它重新加上)。我想的另一种方法是通过计算8个字符来分割它,虽然不知道该怎么做。
但理想情况下我需要将它拆分为[] []类型数组,这样我就可以使用类似的东西来获取每个位...
NSString tile = [[tileData objectAtIndex:i] objectAtIndex:j]];
我是obj-c的新手,所以感谢您的帮助。
答案 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]);