Drill

ProblemsJava › text

Evaluate a formula

hardtextStacksParsingRecursionJava

A spreadsheet cell holds a small arithmetic formula, and the recalculation pass turns it into a number.

evaluateExpression(text: string) → int

Java needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

int evaluateExpression(String text) {
    
}

Worked examples

CallResult
evaluateExpression("2+3*4")14
evaluateExpression("10-2-3")5
evaluateExpression("7/2")3
evaluateExpression("2*3+4*5")26

Hint

Carry a running total plus one pending term. On + or - you bank the pending term; on * or / you fold the new number into it.

Reference solution in Java
int evaluateExpression(String text) {
    String clean = text.replaceAll("\\s+", "");
    int total = 0, term = 0, num = 0;
    char op = '+';
    for (int i = 0; i <= clean.length(); i++) {
        char c = i < clean.length() ? clean.charAt(i) : '#';
        if (c >= '0' && c <= '9') { num = num * 10 + (c - '0'); continue; }
        if (op == '+') { total += term; term = num; }
        else if (op == '-') { total += term; term = -num; }
        else if (op == '*') term = term * num;
        else { if (num == 0) return 0; term = term / num; }
        op = c;
        num = 0;
    }
    return total + term;
}

The same problem in another language

More text problems in Java