Java 如何直接获得字符串形式计算的结果
来源:互联网 发布:sql server 2000数据库 编辑:程序博客网 时间:2024/06/05 19:22
原理:JS脚本可以通过eval("") 直接执行一段字符串代码,使用 Java 内嵌脚本技术在代码中运行JS脚本得到结果
要求:JDK6 以上版本支持
Java 在不知道参数类型,计算方法的情况,对两个参数进行数学运算,但是利用执行 JS 脚本是一个笔记简单的方法。
- 拼接运算字符串,例如 “ 3 * 6 ”
- 根据名称“javascript”创建JS脚本引擎
- 运行 evla("3 * 6") 得到结果
- 默认是 Double 类型,可以根据要求返回指定的结果类型,但是不能超过类型的大小
import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;/** * @author YanLiang * */public class ObjectMath {/** * 不需要实例化 */private ObjectMath() {}/** * @author yan.liang * @date 2015年8月18日 下午9:27:33 * @Description 任意类型的数值计算 * @param valueA 入参A的值 * @param valueB 入参B的值 * @param mathTypeStr 计算规则,加减乘除等 * @param resultType 返回值类型 * * @return 计算结果 * @throws ScriptException */public static Object calculateObject(Object valueA, Object valueB,String mathTypeStr, String resultType) throws ScriptException {/* 拼接计算字符串 */String scriptStr = valueA.toString() + " " + mathTypeStr + " "+ valueB.toString();/* 使用JS脚本引擎执行 */ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine sEngine = sem.getEngineByName("javascript");Double scriptStrResult = (Double) sEngine.eval(scriptStr);/* 判断返回值的类型 */if ("int".equals(resultType)&& Integer.MIN_VALUE < Math.round(scriptStrResult)&& Math.round(scriptStrResult) < Integer.MAX_VALUE) {return (int)Math.round(scriptStrResult);} else if ("long".equals(resultType)) {return Math.round(scriptStrResult);}return scriptStrResult;}/** * @author yan.liang * @throws ScriptException * @date 2015年8月18日 下午9:10:04 * @Description 基本类型加减乘除 */public static void main(String[] args) throws ScriptException {/* 入参 */Object a = "1";Object b = 4;String resultType1 = "int";Object c = "4096";String mathType = "*";String resultType2 = "long";/* 计算( 1 * 4 * 4096 )*/System.out.println(ObjectMath.calculateObject(ObjectMath.calculateObject(a, b, mathType, resultType1), c,mathType, resultType2));}}
0 0
- Java 如何直接获得字符串形式计算的结果
- java代码:计算以 字符串 形式存在的算术表达式
- 获得时间的字符串形式,例如:20031110
- 计算字符串数学公式的结果
- JAVA怎么把从TextArea获得的字符串以文件的形式输出
- struts2的返回结果直接为字符串
- elasticsearch如何获得查询的全部结果
- MVEL实现java直接根据公式计算结果
- 根据时间的字符串形式(20031110)获得日期型
- 使用Intel编译器获得一致的浮点数值计算结果
- 如何在C#里面象js一样可以直接计算字符串的值
- 如何在C#里面象js一样可以直接计算字符串的值
- 如何在C#里面象js一样可以直接计算字符串的值
- java如何获得唯一表示字符串
- 汇编调用子程序计算输入的数字个数并以十进制形式显示计算结果【源码】
- java角度字符串表示形式和double形式的转换
- java计算md5值-为什么要把结果转为16进制的字符串?
- 现有字符串形式的算术表达式,求计算其值。
- web前端js绘制统计图表,访问数据库
- maven学习2
- android富文本编辑器
- hibernateTemplate和hibernateDaoSupport
- ACM经典算法之排序/查找
- Java 如何直接获得字符串形式计算的结果
- Linux命令学习积累
- 剑指offer 算法 (举例让抽象具体化)
- find the safest road
- UIColor,CGColor,CIColor三者的区别和联系
- 计算软件的简史
- oracle存储函数之在应用程序中使用存储函数输出指定用户的基本信息
- RT-Thread finsh源码分析: finsh_ops.h
- CC254x(cc2540/cc2541)的微信AirSync调试笔记