bsh.jar的使用
来源:互联网 发布:socket网络通信流程图 编辑:程序博客网 时间:2024/06/05 12:50
今天看到jar里面有个bsh.jar。不知掉什么用的,所以百度了一下。大体上了解到bsh.jar就是一个用字符串来描述java代码,然后可以运行这些字符串。
bsh.jar双击后可以运行,类似一个命令提示符窗口,你在这里可以试验你的字符串。例如;
int a=13;
int b=12;
print(13+12);
你就可以看到打印出了25;
http://www.ibm.com/developerworks/cn/java/l-formula/这篇文章,告诉你如何应用bsh.jar。我补全他未贴出的代码,然后运行了一下。
目录结构如图
Main.java
import java.util.Hashtable;import java.util.Iterator;import java.util.Vector;import parse.FormulaParser;import bsh.Interpreter;public class Main {public static void main(String[] args) {FormulaParser fp= new FormulaParser();Hashtable paras= new Hashtable();paras.put("price", new Double(100.0));paras.put("discount", new Double(0.9));//折扣率为0.9System.out.println("计算结果:"+ fp.caculateByFormula(fp.loadFormula("1001"), paras));//遵照公式1001计算,计算预期结果为90.0FormulaParser fp1= new FormulaParser();Hashtable paras1= new Hashtable();paras1.put("sale", new Double(11000.0));//销售额paras1.put("score", new Double(0.8));//表现得分System.out.println("计算结果:"+ fp1.caculateByFormula(fp1.loadFormula("1002"), paras1));// 遵照公式1002计算,计算预期结果为9100.0}}
Formula.java
package model;import java.util.Vector;public class Formula {public Formula(String script,Vector parameters){setScript(script);setParameters(parameters);}private String script;private Vector parameters;public String getScript() {return script;}public void setScript(String script) {this.script = script;}public Vector getParameters() {return parameters;}public void setParameters(Vector parameters) {this.parameters = parameters;}}
Calculator.java
package parse;public class Calculator {public static double mutiply(double a,double b){return a*b;}public static double add(double a,double b){return a+b;}}
FormulaParser.java
package parse;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Vector;import model.Formula;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import bsh.Interpreter;public class FormulaParser {public final static String prefix="src/xml/";public double caculateByFormula(Formula formula, Hashtable parameters) { double result=0.0;try{ Interpreter i = new Interpreter(); // 实例化一个BeanShell解释器i.eval("import parse.*;");//引用公式管理系统Vector para= formula.getParameters();//获取公式中包含的参数列表Iterator it= para.iterator();//设置参数值while (it.hasNext()){ String[] dec= (String[])it.next(); String declare= dec[1]+ " "+ dec[0];System.out.println(declare);i.eval(declare); String value= ((Double)parameters.get(dec[0])).toString(); if (value != null){ String assign_value= dec[0]+ "="+ value; System.out.println(assign_value);i.eval(assign_value); }else{ System.out.println("caculateByFormula():"+ dec[0]+ "参数名不符或改参数不存在"); System.exit(1); } } //参数设置成功,根据公式计算脚本进行计算,仅用了一行代码就完成了求值过程,//BeanShell值得你去了解i.eval(formula.getScript());System.out.println(formula.getScript());Double rst= (Double)i.get("result");result= rst.doubleValue(); }catch(Exception e){ System.out.println("caculateByFormula():"+ e.getMessage()); }return result; }public Formula loadFormula(String formulaID) { Vector paras= new Vector(); try{SAXBuilder builder= new SAXBuilder();Document doc= builder.build(prefix+ "Formulas.xml");//prefix是一个字符窜,用来指定公式库实际所在的位置Element root= doc.getRootElement();List formulas= root.getChildren("formula");Iterator it= formulas.iterator();Element formula= null;while( it.hasNext()){ formula= (Element)it.next();if(formula.getAttributeValue("id").equals(formulaID)){break;} } //获取参数列表 List parameters= formula.getChild("parameters").getChildren();Iterator itp= parameters.iterator();while(itp.hasNext()){ String[] s_para= new String[2];Element e_para= (Element)itp.next();s_para[0]= e_para.getAttributeValue("name");s_para[1]= e_para.getAttributeValue("type");paras.add(s_para);} Element script= formula.getChild("script");String s_script= script.getTextTrim();return new Formula(s_script, paras);//将读出的信息组装成一个公式对象}catch(Exception e){ System.out.println("loadFormula():"+ e.getMessage()); } return null;}}
Formulas.xml
<formulas><formula id="1001" name="F_DISCOUNT"><parameters><parameter type="double" name="price"/><parameter type="double" name="discount"/></parameters><script>result= Calculator.mutiply(price, discount)</script></formula><formula id="1002" name="F_BONUS"><parameters><parameter type="double" name="sale"/><parameter type="double" name="score"/></parameters><script>result= Calculator.add(Calculator.mutiply(sale, 0.1),Calculator.mutiply(score, 10000))</script> </formula></formulas>
- bsh.jar的使用
- 第一次使用bsh的包
- bsh规则调用(bsh-1.3.0.jar),相当于javascript里面的eval
- atitit.bsh BeanShell 的动态脚本使用java
- bsh for android : 一个输入ISBN的查询书籍例子
- sh(bsh)
- jar命令的使用
- jar的使用(1)
- jar的使用(2)
- jar的使用(3)
- jar命令的使用
- jar命令的使用
- jar命令的使用
- jar工具的使用
- jar命令的使用
- JAR命令的使用
- jar命令的使用
- jar命令的使用
- Hibernate 报错日记3
- 16进制,字符串,表之间的转换
- NumberUtils用法
- shell 脚本阅读之一
- 安装64位linux系统时要求GPT分区的处理
- bsh.jar的使用
- 判断客户端是否支持cookie
- 如何完全彻底的卸载Oracle
- 【xinfanqie】笔者支招:使用了USB3.0扩展卡却没有加速怎么办
- SQLServer收缩日志及数据库文件【xiame】
- struts2结合poi-3.7实现excel文件数据导入
- linux网卡bond的几种模式
- 双机mount数据库出现ORA-00600[kccsbck_first]
- 图片展现形式的思考