Java版运算表达式解析器

主要功能:
对有括号的四则运算解析并求解.
支持多种表达式类型

思路:
1.把中缀表达式转化成后缀表达式
2.从后缀表达式得到解

注意:
该版本只支持1.6JDK,如果想替换成1.5JDK改替换LinkedList的几个方法就行了.

测试用例:

//初始化
//初始化符号优先级
priorities = new HashMap<String,Integer>();
priorities.put("(", 9);
priorities.put(")", 9);
priorities.put("/", 8);
priorities.put("*", 8);
priorities.put("+", 7);
priorities.put("-", 7);

//初始化表达式字典
dict = new HashMap<String,Double>();
dict.put("a", 2.0);
dict.put("b", 1.0);
dict.put("c", 5.0);
dict.put("d", 3.0);
dict.put("e", 1.0);
dict.put("f", 4.0);
dict.put("g", 10.0);
dict.put("h", 5.0);
dict.put("i", 6.0);

//初始化特殊表达式字典
realDict = new HashMap<String,Double>();
realDict.put("{a}", 1.0);
realDict.put("{b}", 2.0);
realDict.put("{c}", 3.0);
realDict.put("{d}", 4.0);
realDict.put("{e}", 5.0);
realDict.put("{f}", 6.0);
realDict.put("{g}", 7.0);
realDict.put("{h}", 8.0);
realDict.put("{i}", 9.0);


//测试一般表达式
public void testGetValueByExpression(){
String expression = "a+b+c+d*(g-f)";// 2+1+5+3*(10-4)
assertEquals(
new Double(26.0),
new ExpressionUtil().getValueByExpression(
expression,
dict,
priorities
)
);
}

//测试特殊表达式
public void testGetValueByExpressionX(){
String expression = "({c}-{a}+{b})*({e}-{d})+{f}-{i}/{c}"; //(3-1+2)*(5-4)+6-9/3 =7
assertEquals(
new Double(7.0),
new ExpressionUtil().getValueByExpression(
expression,
realDict,
priorities,
new String[]{"{","}"}//如果是[a]或者$a$直接替换就行
)
);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值