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() ));
}
}
分享到:
相关推荐
用Java写的Cron表达式解析, Java swing编写的简洁界面,表达式到界面,界面到表达式,实现双重解析
Java正则表达式Java正则表达式Java正则表达式Java正则表达式
表达式解析表达式解析表达式解析表达式解析表达式解析表达式解析
自己弄的小例子,用到bsf.jar包,用来在java代码中解析表达式,工作中用到,因为需要拿到xml里配置的表达式例如2+3>4;通过java读取xml达到表达式后怎样解析出表达式的值呢,本例子能够说明,简单例子,深入学习可以...
java,正则表达式,详解,java正则表达式,PDF
java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解
1、java SAX方式的XML解析 和 Myeclipse工程源码 2、java 正则表达式详解和常用例子
可以支持复杂的数学表达式(常量、变量、带括号)的计算 如123 + (a * 456)/c - (d + 789) 输入变量值,展示计算步骤和结果 目前支持+ - * / 幂 cos等操作 操作符可方便扩展
java正则实现解析算术表达式 (仅限+-*/和括号)
java版的等式表达式解析,不等式表达式解析,与或非逻辑运算表达式解析;支持带参数的表达式解析; 支持带函数的表达式解析。 1、支持 +、-、*、/、%、&&、||、!、>、<、>=、、==、!=、^(幂)、(、) 运算符 2、支持有...
许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理...
Java表达式语法解析库 parboiled
java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式
如何在Java程序中利用正则表达式实现对字符串的解析.另外,HTMLParser是一款很强大的对HTML网页进行解析的工具,其中大量地用到正则表达式.
JAVA正则表达式JAVA正则表达式JAVA正则表达式
正则表达式之道.doc 正则表达式中的特殊字符.doc Java正则表达式详解.doc 正则表达式.ppt JAVA正则表达式--Pattern和Matcher.doc 例子
java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解
NULL 博文链接:https://shanxc.iteye.com/blog/1471556
Java正则表达式 Java 正则表达式 图片版 携带方便,查阅方便!~