我有一个顶点信息的NSString,例如:
“0.943182 0.95878 0 0.853249 0.956043 0 0.795583 0.954268 0 0.738116 0.954268 0”
我需要在每个值之间添加逗号,将顶点分组为三个组,然后将三个值添加到数组中(然后我将添加到多维数组以与OpenGL ES一起使用)。
有人可以建议如何插入逗号并对数据进行分组吗?
谢谢!
答案 0 :(得分:1)
相当简单:
打破字符串。
NSArray *nums = [theString componentsSeparatedByString:@" "];
Alloc / init一个将存储组的组数组。
NSMutableArray *groups = [NSMutableArray arrayWithCapacity:10];
循环遍历源字符串的组件,并将组","
与它们分开。
NSUInteger basetIndex = 0;
NSString *str = @"";
for(baseIndex = 0; baseIndex < [nums count]; baseIndex += 3) {
str = [str stringByAppendingFormat:@"%@,%@,%@", [nums objectAtIndex:baseIndex],
[nums objectAtIndex:baseIndex+1],
[nums objectAtIndex:baseIndex+2]];
[groups addObject:str];
str = @"";
// or str = [NSString stringWithFormat:...] and no str = @""
}
在给定正确数量的数字的情况下,此代码将起作用,在其他情况下,您将检查组件的索引。
答案 1 :(得分:0)
而不是先将逗号插入字符串,而不是一步一步地扫描字符串:
NSString *str = @"0.943182 0.95878 0 0.853249 0.956043 0 0.795583 0.954268 0 0.738116 0.954268 0";
NSScanner *scanner = [NSScanner scannerWithString:str];
typedef struct { float x, y, z; } vertex;
while (YES) {
vertex v;
if (! ([scanner scanFloat:&v.x] && [scanner scanFloat:&v.y] && [scanner scanFloat:&v.z]))
break;
NSLog(@"%f, %f, %f", v.x, v.y, v.z);
// put the vertex in some container
}
答案 2 :(得分:0)
请尝试以下解决方案。
NSString *str = @"0.943182 0.95878 0 0.853249 0.956043 0 0.795583 0.954268 0 0.738116 0.954268 0";
NSArray *arr = [str componentsSeparatedByString:@" "];
NSUInteger cnt = 0;
NSMutableArray *multilist = [[NSMutableArray alloc] init];
NSString *temp = @"";
for (NSString *comp in arr ) {
cnt++;
if( cnt == 3 )
{
cnt = 0;
temp = [temp stringByAppendingFormat:@"%@" ,comp];
[multilist addObject:temp];
temp = @"";
}
else
{
temp = [temp stringByAppendingFormat:@"%@ ," ,comp];
}
}
NSLog(@"%@",multilist);
[multilist release];