首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java解析表达式JEXL兑现办法

2012-08-24 
java解析表达式JEXL实现办法1. FormulaCalculator类?package testimport java.util.Mapimport org.apach

java解析表达式JEXL实现办法

1. FormulaCalculator类

?

package test;import java.util.Map;import org.apache.commons.jexl.Expression;import org.apache.commons.jexl.ExpressionFactory;import org.apache.commons.jexl.JexlContext;public class FormulaCalculator {String _formula;JexlContext _jexlContext;Map _varMap;public FormulaCalculator(){_jexlContext = new JexlContext(){public Map getVars() {return _varMap;}public void setVars(Map vars) {_varMap.clear();_varMap.putAll( vars );}};}public void setFormula(String formula) throws Exception{validateFormula( formula );_formula = formula;}public void setVars(Map<String, Number> vars){_varMap = vars;}public Number calculate() throws Exception{Expression e = ExpressionFactory.createExpression( _formula );return (Number) e.evaluate( _jexlContext );}private void validateFormula( String formula ) throws Exception{// FIXME: implementation}}

?

?

2. 测试类

?

package test;import java.util.HashMap;import java.util.Map;import junit.framework.TestCase;import org.junit.Assert;public class FormulaCalculatorTest extends TestCase{public void testCalculate() throws Exception{String formula = "3+2";FormulaCalculator cal = new FormulaCalculator();cal.setFormula(formula);cal.setVars(null);Number n = cal.calculate();Assert.assertEquals( 5, Integer.parseInt( n.toString() ));String formula2 = "n1+n2+3";cal.setFormula(formula2);Map<String, Number> mapVars = new HashMap<String, Number>();mapVars.put( "n1", 2);mapVars.put( "n2", 3);cal.setFormula( formula2);cal.setVars( mapVars);Number n2 = cal.calculate();Assert.assertEquals(8, Integer.parseInt( n2.toString() ));}}

?

?

热点排行