String类型数学表达式直接进行运算
来源:互联网 发布:软件测试说明书 编辑:程序博客网 时间:2024/06/05 20:23
今天遇到了一个需要将数据库中保存的表达式,替换其中的字符,并计算出值,java是不能直接计算的例如:
java是无法解决,但是javaScript中有一个eval函数是可以执行的,所以,可以通过其他途径执行javaScript就可以做到,而ScriptEngine是java的一个javaScript实现类,所以就找到了方法,详细方法见下
通过以上的方法即可实现此方法。
- double d = (3+5-(2-4)*2)/24;没有问题
- 但是:遇到 "(3+5-(2-4)*2)/24" 字符串的格式,就不能使用了
java是无法解决,但是javaScript中有一个eval函数是可以执行的,所以,可以通过其他途径执行javaScript就可以做到,而ScriptEngine是java的一个javaScript实现类,所以就找到了方法,详细方法见下
- public class MapJ {
- private String key;//替换的编号
- private String value;//值
- public String getKey() {
- return key;
- }
- public void setKey(String key) {
- this.key = key;
- }
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- public MapJ(String key, String value) {
- super();
- this.key = key;
- this.value = value;
- }
- public MapJ() {
- super();
- }
- }
- //实现类
- import java.util.List;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.script.ScriptException;
- public class JavaScript {
- ScriptEngineManager factory = new ScriptEngineManager();
- ScriptEngine engine = factory.getEngineByName("JavaScript");
- public Double getMathValue(List<MapJ> map,String option){
- double d = 0;
- try {
- for(int i=0; i<map.size();i++){
- MapJ mapj = map.get(i);
- option = option.replaceAll(mapj.getKey(), mapj.getValue());
- }
- Object o = engine.eval(option);
- d = Double.parseDouble(o.toString());
- } catch (ScriptException e) {
- System.out.println("无法识别表达式");
- return null;
- }
- return d;
- }
- }
- //测试
- import java.util.ArrayList;
- import java.util.List;
- public class JavaScriptTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String sbt = "(B+D-(A-C)*A)/F";
- List<MapJ> all = new ArrayList<MapJ>();
- all.add(new MapJ("A","2"));
- all.add(new MapJ("B","3"));
- all.add(new MapJ("C","4"));
- all.add(new MapJ("D","5"));
- all.add(new MapJ("F","24"));
- JavaScript js = new JavaScript();
- Double d = js.getMathValue(all, sbt);
- if(d==null){
- System.out.println(" 无法计算这个表达式");
- }else{
- System.out.println(d*100+"%");
- }
- }
- }
通过以上的方法即可实现此方法。
0 0
- String类型数学表达式直接进行运算
- smarty中数学运算可以直接进行
- ENVI编写数学表达式进行波段运算
- JS数学表达式运算
- java中识别string类型的运算表达式
- linux shell进行数学运算
- 通过shell进行数学运算
- 使用shell进行数学运算
- shell scripts_0 进行数学运算
- lua 字符串数学表达式运算
- java 调用js 方法库进行简单的数学表达式的运算
- 数据类型Number String类型:加减比较运算符表达式toString:function(){}函数
- 利用数据库进行表达式运算
- 三元运算表达式的类型
- 一、类型、运算符、表达式
- 类型,运算符和表达式
- 类型、运算符与表达式
- 类型、运算符与表达式
- xcode 静态库路径设置
- java学习之——日历程序[控制台]
- kaptcha验证码使用
- ubuntu 12.10开机无状态栏与开机密码正确不能登录问题的解决
- uva1133---Vacation
- String类型数学表达式直接进行运算
- 【操作系统-Windows】win7 操作
- 创建文件作为pv
- X connection to localhost:10.0 host broken (explicit kill or server shutdown)
- android setDrawingCacheEnabled
- 【Android 文件】MemoryFile 内存文件
- 《高效学习OpenGL》 之 模板测试 glStencilFunc(), glStencilOp()
- 我的数据库能连接到别人的数据库上,但是自己的连不上,解决办法。
- java split()方法