package com.datastructure.stack.expr; import java.util.Objects; import java.util.Stack; import java.lang.String; public class InfixExpr { String expr = null; public InfixExpr(String expr) { this.expr = expr; } public float evaluate() { Stack<Character> sign = new Stack<Character>(); Stack<Float> number = new Stack<Float>(); int strCnt = 0; int numberLen = 0; String[] String = expr.split("[^\\d]"); if(expr!=null){ for (int i = 0,strLen = expr.length(); i < strLen; i++) { char c=expr.charAt(i); if(Objects.equals(c, '+')||Objects.equals(c, '-')){ sign.push(c); }else if(Objects.equals(c, '*')||Objects.equals(c, '/')){ float number1=number.pop(); float number2=Float.parseFloat(String[strCnt]); float result=calculate(number1,number2,c); numberLen = String[strCnt].length(); number.push(result); i += numberLen; strCnt++; }else{ number.push(Float.parseFloat(String[strCnt])); numberLen = String[strCnt].length(); strCnt++; i += (numberLen-1); } } for (int i = 0,signS = sign.size(); i < signS; i++) { float number1 = number.pop(); float number2 =number.pop(); char c = sign.pop(); float result=calculate(number2,number1,c); number.push(result); } } return number.pop(); } private float calculate(float number1,float number2,char c){ float result = 0; if(Objects.equals(c, '+')){ result = number1 + number2; }else if(Objects.equals(c, '-')){ result = number1 - number2; }else if(Objects.equals(c, '*')){ result = number1 * number2; }else if(Objects.equals(c, '/')){ result = number1 / number2; } return result; } }