用过别的语言中的Eval函数知道它很eval但确实好用,不过Java标准包里并没有提供eval方法。在昨天写程序时用到这个功能,就顺手写了一下,当然有参考网上别人的版本,在此一并谢过。其它不多说了,直接上代码。
package com.winson.calc;
import java.util.ArrayList;
import java.util.Stack;
public class WinsonEval {
private final static String ERR_NOT_END_VALID = "The last character of your expression MUST be '#'!";
private final static String ERR_PARENTHESE_NOT_PAIR = "'(' & ')' should be used in pair!";
private final static String ERR_CHAR_NOT_SUPPORT = "Not supported character";
private final static String ERR_OPERATION_NOT_SUPPORTED = "Not supported operation";
private final static String ERR_OPERATOR_NOT_VALID = " doesn't support double data!";
private final static String ERR_UNKNOWN = "An unknown error!";
private static boolean flag_double;
/*
* expression must be end with #
*/
public static String eval(String expression) {
ArrayList<String> list;
try {
list = toSuffixSequence(expression);
return calculate(list);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static boolean isResultDouble(){
return flag_double;
}
private static String calcul