一、例用堆栈后缀表达式计算
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Stack; public class CalculateService { static final String symbol = "+-*/()"; static final String[] priority = {"+-", "*/", "()"}; static Comparator<String> comp = new Comparator<String>() { public int compare(String s1, String s2) { int n1 = 0; int n2 = 0; for (int i = 0; i < priority.length; i++) { if (priority[i].indexOf(s1) >= 0) { n1 = i; } if (priority[i].indexOf(s2) >= 0) { n2 = i; } } return n1 - n2; } }; public static final String REGEX_SPACE = "\\s*"; public static final String STRING_EMPTY = ""; public static String handleInputExpression(String expression) { List<String> suffixList = null; String resultString = null; try { List<String> infixList = CalculateService.toInfixExpressionList(expression); suffixList = infixToSuffix(infixList); double doubleResult = calculator(suffixList); int intResultInt = new Double(doubleResult).intValue(); resultString = String.valueOf(intResultInt); System.out.println("input = " + expression + " ,result = " + resultString); } catch (Exception e) { resultString = "illegal expression!"; } return resultString; } /** * 中缀表达式转后缀表达式 */ public static List<String> infixToSuffix(List<String> expression) throws Exception { if (expression == null) { throw new Exception("illegal expression!"); } List<String> suffixList = new ArrayList<String>(); Stack<String> operatorStack = new Stack<String>(); StringBuffer buffer = new StringBuffer(); for (String item : expression) { if (symbol.indexOf(item) >= 0) // 是运算符 { if (item.equals("(")) // 左括号直接入栈 { operatorStack.push(item); // 入栈 } else i