如何将String逻辑表达式转换为java可执行表达式

时间:2016-04-27 17:36:33

标签: java parsing

遗憾的是,这很丑陋。我有一个以一种格式编写的字符串,作为约束发送到数据库。它看起来像这样:

String constraint = "((attr1 eq 1) OR (attr2 eq 5)) AND (attr3 BETWEEN (1, 5))"

我需要一种将其解析为流过滤器的方法,如下所示:

stream.filter(obj -> 
    (obj.getAttr1() == 1 || obj.getAttr2() == 5) && (isBetween(obj.getAttr3(), 1, 5)))

isBetween方法在别处可以确定attr3值是否介于1和5之间。是否有一种简单的解析方法?

有多个过滤器调用而不是将它们全部合并为一个应该没问题。决定使用哪个getAttr可以在if语句中完成:

if (attr.equals("attr1")) {
    obj.getAttr1();
}

1 个答案:

答案 0 :(得分:1)

您可能希望查看EvalEx。它是一个通用表达式解析器和评估器。

您可以定义自己的运算符,因此“eq”,“and”和“or”应该不是问题。你可以创建变量,所以“attr1”和朋友也不应该成为问题。

这可能是问题所在:

attr3 BETWEEN (1, 5)

不确定是否可以定义在右侧采用多个参数的运算符,或者返回后缀运算符的函数。但是源代码是可用的,所以也许你可以破解它。