字符串转换公式运算
在某些特殊情况下,需要进行前台运算,然后具体运算的参数和公式是后台定义的,我们这个时候就需要把后台的公式转换成可以计算的公式。计算并输出结果。比如:(a+5*b)+( 2 * 3 )+1-(2*x)+6
方法一
利用javax自带的ScriptEngine这个类来计算,需要jdk1.6一上。优点:操作简单。缺点:效率底,jdk有要求,如果在安卓中是没有ScriptEngine,ScriptEngineManager个类。需要引进好几个包,大概1MB
这样:
String str = "(x >= 0 && x <= 5)";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("x", 4);
Object result = engine.eval(str);
System.out.println("结果类型:" + result.getClass().getName() + ",计算结果:" + result);
或者这样
String str = "3+(2+1)-1+3/1+2*(2+4*(1+1))+2+1-(3*1-1)";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval(str);
System.out.println("结果类型:" + result.getClass().getName() + ",计算结果:" + result);
一般情况直接COPY上面就可以了。
方法二,没有javax包的时候使用,如安卓中…
优点:速度快。缺点:功能简单,一般运算满足
calc.java 点击这里下载
使用这样:
String Str = "(a+5*b)+( 2 * 3 )+1-(2*x)+6";
Replace r = new Replace(Str);
r.put("a", 3);
r.put("b", "2");
r.put("x", 4);
System.out.println("替换变量前:" + Str);
System.out.println("替换变量后:" + r.toString());
System.out.println("计算结果:" + 计算器.eval(r.toString()));
//-------------------输出结果:-------------------------//
//替换变量前:(a+5*b)+( 2 * 3 )+1-(2*x)+6
//替换变量后:(3+5*2)+( 2 * 3 )+1-(2*4)+6
//计算结果:18
操作简单。
calc.java 点击这里下载