2

我有一个 NSString 对象,其中指定了多个条件,如下所示:

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";

我想执行 NSString 对象中指定的公式并找出答案为 BOOL。指定的条件是返回 True 还是 False。

提前致谢:)

4

3 回答 3

4

只需使用NSPredicate这样的:

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";
NSString *strFormula3 = @"\"hello\" == \"world\"";

NSPredicate *predicate = [NSPredicate predicateWithFormat:strFormula1];
BOOL result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula2];
result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula3];
result = [predicate evaluateWithObject:nil]; //False

如果您想知道谓词如何解析您的表达式,只需使用:

NSLog(@"%@", [predicate predicateFormat]);

在我们的例子中返回:

("man" == "man" AND 1 < 5) OR 12 < 9 //1st Expression
"pac@pac.com" == "pac1@pac1.com" OR (9 == 9 AND 8 > 2) OR 2 == 2 //2nd Expression
"hello" == "world" //3rd Expression
于 2012-06-09T08:41:38.027 回答
1

那么你需要一个表达式解析器和评估器。

试试这个: http ://www.engr.mun.ca/~theo/Misc/exp_parsing.htm

于 2012-06-09T08:10:21.793 回答
0

您需要结合使用方法和强制转换。

您的第一个论坛将是:

if([@"\"man\"" isEqualToString:@"\"man\""] && 1 < 5 || 12 < 9) {
        //Forumla == TRUE
 }

如果您想将其转换为 BOOL 对象,如下@rishi所述:

BOOL strFormula1 = [@"\"man\"" isEqualToString:@"\"man\""] && 1<5 || 12<9;

如果您only有要使用的字符串,如@qianfg建议的那样,您需要使用某种形式的正则表达式解析字符串中的整数和字符串以确定您的变量。

于 2012-06-09T08:12:38.687 回答