ScriptEngineManager脚本计算

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

private static void test5() {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
        String str = "(10+20-3)/9";
        Object eval = null;
        try {
            eval = scriptEngine.eval(str);
        } catch (ScriptException e) {
            e.printStackTrace();
        }
        System.out.println("表达式"+ str + "运算的结果是:" + eval);
    }

运行结果:
在这里插入图片描述
上面的测试是最近遇到一个需求,大概是这样的:有一个接口上传Excel文档,里面有数据,数据有一个row_index标识,是不重复的,有些指标是其它row_index计算而来的,比如第一行的表达式:A23+A24,意思就是row_index为23加上row_index为24的值就是该行指标的值。那表达式有了,这些需要计算的主指标需要根据子指标的值来计算,上传解析后就要做上面的操作。

目的就是把表达式里面的和行次有关的字符转为对应的row_index的值,得到一个计算公式的string字符串,然后用脚本引擎执行得到结果再赋值给主指标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring Boot中执行Groovy脚本可以使用ScriptEngineManager类。以下是一个简单的示例: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.5.14</version> </dependency> ``` 2. 编写Groovy脚本 编写一个简单的Groovy脚本,例如: ```groovy def greet(name) { return "Hello, $name!" } ``` 3. 执行Groovy脚本 在Spring Boot应用程序中使用ScriptEngineManager类执行Groovy脚本。例如: ```java import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; @Service public class GroovyService { public String executeGroovy(String script, String arg) throws ScriptException { ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("groovy"); engine.eval(script); Invocable invocable = (Invocable) engine; return (String) invocable.invokeFunction("greet", arg); } } ``` 在上面的代码中,Groovy脚本作为参数传递给ScriptEngine的eval方法。然后,使用Invocable接口调用脚本中定义的greet方法。最后,返回greet方法的结果。 4. 测试 使用以下代码测试GroovyService类: ```java @SpringBootTest class GroovyServiceTest { @Autowired GroovyService groovyService; @Test void testExecuteGroovy() throws ScriptException { String script = "def greet(name) {\n" + " return \"Hello, $name!\"\n" + "}"; String result = groovyService.executeGroovy(script, "World"); assertEquals("Hello, World!", result); } } ``` 在上面的代码中,我们传递了一个Groovy脚本和一个参数“World”给GroovyService的executeGroovy方法。然后,我们检查执行结果是否正确。 这是一个简单的示例,您可以根据自己的需要修改Groovy脚本和Java代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值