我遇到componentsSeparatedByString:
的问题,给我带来了奇怪的结果。
使用此代码:
CCLOG(@" Found string %@",string);
tokens = [string componentsSeparatedByString:@"[,]"];
CCLOG(@" sanity %@", (NSString *)[tokens objectAtIndex:0]);
int type = [(NSString *)[tokens objectAtIndex:0] integerValue];
int x = [(NSString *)[tokens objectAtIndex:1] integerValue]; //<< breakpoint
我得到了这个输出日志:
2013-03-03 21:29:39.184 Legends[33427:c07] Found string 1[0,5]
2013-03-03 21:29:39.185 Legends[33427:c07] sanity 1[0,5]
因此,程序在最后一行中断是有意义的,因为数组标记中的第一个对象具有整个字符串,但不应将字符串@"1[0,5]"
拆分为@"1"
{{1} }和@"0"
?
答案 0 :(得分:2)
不,您误解了该方法的工作原理。 componentsSeparatedByString:
不使用传递的字符串中的单个字符,它使用整个字符串。您的分隔符是三个字符的序列[,]
。像@"pecan[,]pie"
这样的字符串使用此分隔符,但@"1[0,5]"
不会。类似的方法componentsSeparatedByCharactersInSet:
将满足您的期望:
[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[,]"]];
如果您想从字符串中提取数字并获取其数值,您可能需要查看NSScanner
。