我有一个用Java编写的过滤应用程序,它允许我根据公司的基本面(例如税前利润、股息率等)对公司进行过滤。
我已经创建了一个过滤引擎,目前它是硬编码的,可以接受在编译时给出的过滤器。
我想要做的是打开一个web服务,我可以在其中传入JSON,以便使用在运行时定义和传入的过滤器运行过滤。
为此,我需要以某种方式将字符串转换为Java代码。
例如,JSON中的以下字符串:
current.preTaxProfit > previous.preTaxProfit变成Java代码,如下所示:
return current.getPreTaxProfit() > previous.getPreTaxProfit();我遇到的主要问题是解析数学字符串,例如:
current.preTaxProfit > (previous.preTaxProfit * 1.10)事情可能很快就会变得非常复杂,特别是当涉及到内括号之类的东西时,并遵守BODMAS。
有没有专门用于解析数学字符串的库,或者有没有人知道什么好的资源可以帮助我?
例如,我发现了以下内容:
Javaassist:http://davidwinterfeldt.blogspot.co.uk/2009/02/genearting-bytecode.html
有谁有使用Javaassist的经验吗?在我的架构中,我传入了实现了“回调”方法的对象,因此创建整个类和方法的能力可能会很有用。
发布于 2014-05-13 03:38:21
有两种可能性:
脚本API可能是获得结果最快的,但EL更好。
发布于 2014-05-13 03:36:45
考虑使用表达式语言,例如JEXL。
如果您将current和previous放在上下文中,只需评估:
current.preTaxProfit > (previous.preTaxProfit * 1.10)完整示例:
// create context
JexlContext jc = new MapContext();
context.set("current", someObject);
context.set("previous", anotherObject);
// create expression
String jexlExp = "current.preTaxProfit > (previous.preTaxProfit * 1.10)";
Expression e = jexl.createExpression(jexlExp);
// evaluate
Object result = e.evaluate(jc);https://stackoverflow.com/questions/23617274
复制相似问题