public void putOperator(String op) { while (operators.size() > 0 && precedence(operators.get(operators.size() - 1)) >= precedence(op)) { reduce(); } operators.add(op); }
public void put(String elem) { if (elem.equals("(")) { operators.add(elem); } else if (elem.equals(")")) { while (!operators.get(operators.size() - 1).equals("(")) { reduce(); } operators.remove(operators.size() - 1); } else if (elem.matches("\\d+")) { putNumber(elem); } else { putOperator(elem); } }
public int calculate(String expr) { numbers.clear(); operators.clear(); expr = expr.replaceAll("\\s+", ""); System.out.println(expr); String[] parts = expr.split("((?=(\\+|\\-|\\*|\\/|\\(|\\)))|(?<=(\\+|\\-|\\*|\\/|\\(|\\))))"); for (String part : parts) { System.out.print("[" + part + "]"); } for (String part : parts) { if (part.length() == 0) { continue; } put(part); } while (operators.size() > 0) { reduce(); } return numbers.get(0); }