打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java执行字符串数学表达式 ScriptEngine
今天遇到了一个需要将数据库中保存的表达式,替换其中的字符,并计算出值,java是不能直接计算的例如:
Java代码
double d = (3+5-(2-4)*2)/24;没有问题
但是:遇到   "(3+5-(2-4)*2)/24" 字符串的格式,就不能使用了
java是无法解决,但是javaScript中有一个eval函数是可以执行的,所以,可以通过其他途径执行javaScript就可以做到,而ScriptEngine是java的一个javaScript实现类,所以就找到了方法,详细方法见下
Java代码
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+"%");
}
}
}
通过以上的方法即可实现此方法。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
给 Java SE 注入脚本语言的活力
Java split用法
统计一个Java字符串中的单词数量
java正则表达式 非捕获组,捕获组详解
正则表达式模式匹配的String方法
正则表达式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服