首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时将字符串解析为Java代码

在运行时将字符串解析为Java代码
EN

Stack Overflow用户
提问于 2014-05-13 03:28:42
回答 2查看 660关注 0票数 3

我有一个用Java编写的过滤应用程序,它允许我根据公司的基本面(例如税前利润、股息率等)对公司进行过滤。

我已经创建了一个过滤引擎,目前它是硬编码的,可以接受在编译时给出的过滤器。

我想要做的是打开一个web服务,我可以在其中传入JSON,以便使用在运行时定义和传入的过滤器运行过滤。

为此,我需要以某种方式将字符串转换为Java代码。

例如,JSON中的以下字符串:

代码语言:javascript
复制
current.preTaxProfit > previous.preTaxProfit

变成Java代码,如下所示:

代码语言:javascript
复制
return current.getPreTaxProfit() > previous.getPreTaxProfit();

我遇到的主要问题是解析数学字符串,例如:

代码语言:javascript
复制
current.preTaxProfit > (previous.preTaxProfit * 1.10)

事情可能很快就会变得非常复杂,特别是当涉及到内括号之类的东西时,并遵守BODMAS。

有没有专门用于解析数学字符串的库,或者有没有人知道什么好的资源可以帮助我?

例如,我发现了以下内容:

Javaassist:http://davidwinterfeldt.blogspot.co.uk/2009/02/genearting-bytecode.html

有谁有使用Javaassist的经验吗?在我的架构中,我传入了实现了“回调”方法的对象,因此创建整个类和方法的能力可能会很有用。

EN

回答 2

Stack Overflow用户

发布于 2014-05-13 03:38:21

有两种可能性:

  • Java脚本编程接口:
  • EL,Expression Language。

脚本API可能是获得结果最快的,但EL更好。

票数 2
EN

Stack Overflow用户

发布于 2014-05-13 03:36:45

考虑使用表达式语言,例如JEXL

如果您将currentprevious放在上下文中,只需评估:

代码语言:javascript
复制
current.preTaxProfit > (previous.preTaxProfit * 1.10)

完整示例:

代码语言:javascript
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23617274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档