iOS DDMathParser获取数字“块”
我正在使用DDMathParser为iOS构build一个计算器应用程序。 我想知道如何将一个expression式( NSString
)(如5+900/32
NSString
)分解为单独的数字值: 900
和32
。 我宁愿我得到这些在一个NSArray
或其他相对有用的列表对象。 我听说有一个简单的方法来做到这一点与DDMathParser
– 这就是为什么我从GCMathParser
切换。
DDMathParser作者在这里。
是的,这很容易,有几种方法可以解决这个问题。 如果你只是想要什么数字,不关心操作员,你可以使用标记 API:
NSError *tokenizingError = nil; DDMathStringTokenizer *tokenizer = [DDMathStringTokenizer tokenizerWithString:@"5+900/32" error:&tokenizingError]; NSArray *tokens = [tokenizer tokens]; NSMutableArray *numbers = [NSMutableArray array]; for (DDMathStringToken *token in tokens) { if ([token tokenType] == DDTokenTypeNumber) { [numbers addObject:[token numberValue]]; } } // numbers now is @[ @5, @900, @32 ];
然而,这种方法有一个警告,用这个例子可以很好地说明: @"-42"
。 DDMathParser中的令牌总是被parsing为无符号数字,因为前面的减号实际上是一个运算符,并且根据其他运算符的不同而得到不同的应用。 这意味着,如果将string@"-42"
标记为string,则会看到它包含两个标记:否定运算符和数字42。