import java.util.Stack;
/**
* Created by yywang on 2017/1/14.
*/
public class Evaluate {
static double evaluate(String tmp){
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
for (int i=0; i<tmp.length(); i++){
String s = String.valueOf(tmp.charAt(i));
//运算符压入 操作符栈
if(s.equals("(")) ;
else if(s.equals("+")) ops.push(s);
else if(s.equals("-")) ops.push(s);
else if(s.equals("*")) ops.push(s);
else if(s.equals("/")) ops.push(s);
else if(s.equals(")")){
//遇到右括号开始计算
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) v = vals.pop() + v;
if (op.equals("-")) v = vals.pop() - v;
if (op.equals("*")) v = vals.pop() * v;
if (op.equals("/")) v = vals.pop() / v;
vals.push(v);
}else{
//数字压入 操作数栈
vals.push(Double.parseDouble(s));
}
}
return vals.pop();
}
public static void main(String[] args) {
String t = "(1+((2+3)*(4*5)))";
double ret = evaluate(t);
System.out.println(ret);
}
}
输出结果
101.0