componentsSeparatedByCharactersInSet问题

时间:2013-08-05 11:35:59

标签: objective-c

我有一个名为“result”的字符串,因为我需要从数学表达式中获取数字。表达式以NSString的形式给出。我使用方法[NSString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:]方法给出一个包含组件的NSArray。但是我很少有疑问。这是代码。

NSString *result=[obj computeTheExp:@"+19+55/23-42*3-34-"];

我在上面使用这个方法

NSArray *operands = [inputString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+-/*"]];

当我使用

显示操作数的内容时
NSLog(@"%i",[operands count]);

    for(i=0;i<[operands count];i++)
    {
        NSLog(@"%@",[operands objectAtIndex:i]);
    }

我在控制台上得到了这个

2013-08-05 16:47:52.967 mathExpTest[6708] 8
2013-08-05 16:47:52.992 mathExpTest[6708]
2013-08-05 16:47:53.002 mathExpTest[6708] 19
2013-08-05 16:47:53.012 mathExpTest[6708] 55
2013-08-05 16:47:53.022 mathExpTest[6708] 23
2013-08-05 16:47:53.032 mathExpTest[6708] 42
2013-08-05 16:47:53.042 mathExpTest[6708] 3
2013-08-05 16:47:53.052 mathExpTest[6708] 34
2013-08-05 16:47:53.062 mathExpTest[6708]

计数不应该是6?为什么显示屏上有空白?

2 个答案:

答案 0 :(得分:4)

你的字符串以分隔符开头和结尾,这就是原因。这是componentsSeparatedByCharactersInSet:在这种情况下的定义响应:

  

相邻出现的分隔符会在结果中产生空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。

答案 1 :(得分:2)

这种行为很正常。从文档:“如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空”http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html -