java中计算字符串表达式
来源:互联网 发布:甘棠诗社知乎 编辑:程序博客网 时间:2024/04/29 05:39
Java 字符串转换成算术表达式
- 博客分类:
- Java
今天遇到了一个需要将数据库中保存的表达式,替换其中的字符,并计算出值,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
- java中计算字符串表达式
- Java中计算字符串表达式的好办法
- java字符串表达式计算
- 在Java中计算四则运算表达式字符串的值
- C#中实现字符串表达式计算
- pb中使用字符串表达式计算结果
- 字符串表达式的计算java版本
- Java解析字符串表达式--逆波兰表达式的计算
- 用java 正则表达式 计算一个字符串中某个子串的个数
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 如何计算字符串表达式
- 计算字符串表达式
- 字符串表达式计算
- 字符串表达式的计算
- 字符串输入计算表达式
- 计算 字符串数学表达式
- 字符串表达式的计算
- Java中动态计算表达式的值
- java 对象参数
- javascript的对象
- Symfony2 学习笔记之模板使用
- vc添加开机自启动&取消开机自启动
- 朴素贝叶斯分类器
- java中计算字符串表达式
- Vivado HLS与System Generator:联系与区别
- Mahout文本向量化
- 2014 ACM-ICPC Beijing Invitational Programming Contest E
- poj2049--Finding Nemo
- mongodb学习资料
- 面向对象版计算器(七)
- C++:C++Primer读书笔记(6)--标准IO库
- execve 函数