我如何解析NSString以在2个不同的数组中分别获取单词和操作员



我有一个字符串

NSString *formula = @"base+unit1-unit2*unit3/unit4";

我能够使用代码在数组中获取所有单词:

NSArray *myWords = [formula componentsSeparatedByCharactersInSet:
                            [NSCharacterSet characterSetWithCharactersInString:@"+-*/"]];
//myWords = {base , unit1,unit2,unit3,unit4}

但是我面临问题,使所有操作员都陷入困境 这个Myoperator = { , - ,*,/}请建议谢谢

使用 NSScanner漫步在弦乐中提取所需的所有零件(请参阅scanCharactersFromSet:intoString:scanUpToCharactersFromSet:intoString:)。

您可以使用nsregularexpression实现这一目标。快速解决方案可能是:

NSString *formula = @"base+unit1-unit2*unit3/unit4";
NSRegularExpression *testExpression = [NSRegularExpression regularExpressionWithPattern:@"[*-/]"
                                                                                         options:NSRegularExpressionCaseInsensitive error:nil];
[testExpression enumerateMatchesInString:formula
                                 options:0
                                   range:NSMakeRange(0, formula.length)
                              usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                              NSLog(@"%@", [formula substringWithRange:result.range]); 
}];

您可以在该块内使用所有操作员根据正则表达式找到一个可变的数组。

正则表达只是一个快速的例子 - 您可以创建比那更奇特的东西:)

您可以创建一个字符集,其中包含所有字符,除了使用invertedset

NSCharacterSet *operatorCharacters = [NSCharacterSet characterSetWithCharactersInString:@"+-/*"];
NSCharacterSet *otherCharacters = [operatorCharacters invertedSet];    
NSArray *operatorComponents = [formula componentsSeparatedByCharactersInSet:
                            otherCharacters];

然后,您需要从数组的可变副本中删除任何空字符串

NSMutableArray *mutableOperators = [operatorComponents mutableCopy];
[mutableOperators removeObject:@""];

会有类似的工作吗?(psudocode):

for character in string:
    if character is one of +, -, /, *:
        add to array
return array

最新更新