componentsSeparatedByString:不拆分包含分隔符中所有字符的字符串

时间:2013-03-04 02:39:46

标签: objective-c cocoa nsstring tokenize

我遇到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"

1 个答案:

答案 0 :(得分:2)

不,您误解了该方法的工作原理。 componentsSeparatedByString:不使用传递的字符串中的单个字符,它使用整个字符串。您的分隔符是三个字符的序列[,]。像@"pecan[,]pie"这样的字符串使用此分隔符,但@"1[0,5]"不会。类似的方法componentsSeparatedByCharactersInSet:将满足您的期望:

[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[,]"]];

如果您想从字符串中提取数字并获取其数值,您可能需要查看NSScanner