Je construis une application de calculasortingce pour iOS en utilisant DDMathParser. Je voudrais savoir comment séparer une expression ( NSSsortingng
) comme 5+900/32
en ses valeurs numériques individuelles: 5
, 900
et 32
. Je préférerais que je les obtienne dans un NSArray
ou un autre object list relativement utile. J'ai entendu dire qu'il y a un moyen facile de le faire avec DDMathParser
– C'est pourquoi je suis passé de GCMathParser
.
DDMathParser auteur ici.
Oui, c'est très facile, et il y a plusieurs façons de s'y prendre. Si vous voulez simplement savoir quels sont les numbers et ne vous souciez pas des opérateurs, vous pouvez utiliser l'API tokenizing :
NSError *tokenizingError = nil; DDMathSsortingngTokenizer *tokenizer = [DDMathSsortingngTokenizer tokenizerWithSsortingng:@"5+900/32" error:&tokenizingError]; NSArray *tokens = [tokenizer tokens]; NSMutableArray *numbers = [NSMutableArray array]; for (DDMathSsortingngToken *token in tokens) { if ([token tokenType] == DDTokenTypeNumber) { [numbers addObject:[token numberValue]]; } } // numbers now is @[ @5, @900, @32 ];
Il y a cependant une mise en garde à cette approche, et il peut être mieux illustré avec cet exemple: @"-42"
. Les jetons dans DDMathParser sont toujours analysés comme des nombres non signés , car le signe less devant est en réalité un opérateur et est appliqué différemment selon les autres opérateurs. Cela signifie que si vous marquez la string @"-42"
, vous verrez qu'elle contient deux jetons: un opérateur de négation, et le numéro 42.