在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
一、先看几张图



二、来写个demo
package com.zxy.test;
import java.util.HashMap;
import java.util.Map;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import org.junit.Test;
/**
* 如何将一个字符串公式,计算出结果
* @author ZENG.XIAO.YAN
* @date Oct 26, 2017 7:34:08 PM
* @version V1.0
*/
public class RunJsOnJava {
@Test
public void test01() throws ScriptException {
String formula = "(a+b)*(a-b)";
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("a", 20.1);
map.put("b", 11.1);
Double result = (Double) this.calculateResultByFormula(formula, map);
System.out.println(result); //280.80000000000007
}
/**
* 通过字符串公式,和参数,计算出结果
* @param formula
* @param paramMap
* @return
* @throws ScriptException
*/
public Object calculateResultByFormula (String formula,Map<String,Object> paramMap) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("js");
for (String key : paramMap.keySet()) {
formula = formula.replaceAll(key, paramMap.get(key).toString());
}
//此时 formula="(20.1+11.1)*(20.1-11.1)"
Object result = scriptEngine.eval(formula); // 运行js脚本
return result;
}
}
package com.zxy.test;
import java.util.HashMap;
import java.util.Map;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import org.junit.Test;
/**
* 如何将一个字符串公式,计算出结果
* @author ZENG.XIAO.YAN
* @date Oct 26, 2017 7:34:08 PM
* @version V1.0
*/
public class RunJsOnJava {
@Test
public void test01() throws ScriptException {
String formula = "(a+b)*(a-b)";
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("a", 20.1);
map.put("b", 11.1);
Double result = (Double) this.calculateResultByFormula(formula, map);
System.out.println(result); //280.80000000000007
}
/**
* 通过字符串公式,和参数,计算出结果
* @param formula
* @param paramMap
* @return
* @throws ScriptException
*/
public Object calculateResultByFormula (String formula,Map<String,Object> paramMap) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("js");
for (String key : paramMap.keySet()) {
formula = formula.replaceAll(key, paramMap.get(key).toString());
}
//此时 formula="(20.1+11.1)*(20.1-11.1)"
Object result = scriptEngine.eval(formula); // 运行js脚本
return result;
}
}
三、小结
在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果的更多相关文章
- Java8中执行js脚本
代码中除了callJSFunctionFromFile函数,其他均转载于文章JDK1.8中如何用ScriptEngine动态执行JS import jdk.nashorn.api.scripting. ...
- 自动化测试中执行JS脚本方法封装
执行JS脚本方法封装: class JavaScript(Base): def execute_javascript(self, js): """执行 JavaScrip ...
- java中执行JS脚本
package 测试包; import javax.script.*; public class SSSSSSSSS { public SSSSSSSSS() { // TODO Auto-gener ...
- Java代码中执行Linux命令,亲测可用
前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...
- java util - 在java代码中执行javascript代码工具 rhino-1.7.7.jar
需要 rhino-1.7.7.jar 包 代码示例: package cn.java.mozilla.javascript; import org.mozilla.javascript.Context ...
- Java通过ScriptEngine 执行js脚本案例
public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodEx ...
- java代码中执行liunx命令
public static String runShell(String command){ try{ String[] commands = isLinux()?new String[]{" ...
- 在.Net中执行js
在.Net中执行js 利用Noesis.Javascript开源组件可以做到在.net中执行js脚本,同时js脚本也能调用C#函数.这个组件的获得方式:在NuGet中输入搜索"Noesis& ...
- java中执行js代码
要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...
随机推荐
- SQLServer 学习笔记之超详细基础SQL语句 Part 10
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...
- 解决跨域问题之anywhere
anywhere搭建服务,ionic PC端和手机端可以通过网址来查看网页效果.解决跨域问题 大家都知道编写完HTML代码后,可以直接在pc端的浏览器查看,但现在手机端越来越广泛了,想跟在pc端查看网 ...
- CSS实现鼠标经过网页图标弹出微信二维码
特点 1.纯CSS实现二维码展示功能,减少加载JS: 2.使用CSS3 transform 属性: ## 第一步 在需要展示二维码的地方添加如下代码,其中<a>标签内容可以根据需要修改成 ...
- Oracle EBS AR 客户API
------------------------------------ 1. Set Environment ------------------------------------ -- 1a. ...
- 自己实现more命令
#include <stdio.h> #include <stdlib.h> #define PAGELEN 24 #define LINELEN 512 int see_mo ...
- Linux下查看端口,强制kill进程
1.查看8088端口被哪个进程占用:netstat -apn | grep 8088 2.强制kill某一进程:kill -s 9 1827
- python的学习之路day2
1.什么是常量: 常量在程序中是不变的量 但是在python中所有的变量都可以改 注意:为了防止区分错误,所以python中常量使用大写命名 例如: MYSQL_CONNECTION = '192.1 ...
- Win7 user profile cant logon
1.local user:testlb1 1234@cat can login safe model 1.重新启动计算机开机时连续点击F8,选择进入安全模式.2.开始-在搜索栏中输入services. ...
- 实现一个协程版mysql连接池
实现一个协程版的mysql连接池,该连接池支持自动创建最小连接数,自动检测mysql健康:基于swoole的chanel. 最近事情忙,心态也有点不积极.技术倒是没有落下,只是越来越不想写博客了.想到 ...
- 第 15 章 位操作(binbit)
/*------------------------------------ binbit.c -- 使用位操作显示二进制 ------------------------------------*/ ...