Convert String to Operator(+*/-) in Java

Convert String to Operator(+*/-) in Java

I am using Stack class to calculate simple arithmetic expressions involving integers, such as 1+2*3.your program would execute operations in the order given,without regarding to the precedence of operators. *Thus, the expression 1+2*3 should be calculated (1+2)*3=9,not 1+(2*3)=7.

If i get the input as 1+2*3,i know how to convert the string 1,2,3 to Integer.but i don't know how to covert +,* from string type to operator.

My code logic is: For eg: Given string 2 + (3 * 5), So 3 * 5 will be operated first then +2 will be performed in result of 3 * 5.

9

5 Answers

probably the best way to do it will be equals, but it's best to ignore whitespaces:

i'm not quite sure how you split your string, but for example, if you have a char op and two integer a and b:

String str = op.replace(" ", "");

if(str.equals("*")){
   retVal = a*b;
} else if(str.equals("+")){
   retVal = a+b;
}//etc
4

Do what Ogen suggested and manually check the operator. A quick shortcut to doing the if, else if .... structure is switch, that is

switch(operand) {
case "*":
      break;
case "+":
      break; 
 .....
 default:
}

You will have to manually check and assign the operator. E.g.

if (s.equals("+")) {
    // addition
}

Quick solution: Use below code for executing correct javascript Arithmetic expression in java.

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine se = manager.getEngineByName("JavaScript");        
    try {
        Object result = se.eval(val);
        System.out.println(result.toString());
    } catch (ScriptException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Ok, assuming your assignment needs you to use the Stack class and you already have the logic to pick numbers ( including the negative numbers -- that would an operator followed by another operator in all but one cases) and operators and parens, what you could do is as follows.

If you encounter a number, pop the last two elements from your stack. The first item you pop will be an operator and the next will be a number. Evaluate the expression and push it into Stack and continue.

You can ignore the parenthesis. You will also have to handle the case of reading a number or parenthesis the first time.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.