package com.github.wdn.coding2017.basic.stack.expr; import com.github.wdn.coding2017.basic.Stack; import java.util.Arrays; /** * Created by Administrator on 2017/5/1 0001. */ public class InfixToPostfix { public static String convert(String expr) { //"3*20+12*5-40/2"==100 //3 20*12 5*+ 40 2/- try { String[] numArr = expr.split("[+|\\-|*|/]"); String[] operatorArr = expr.split("\\d+\\d*"); Object[] operators = Arrays.stream(operatorArr).filter(x -> !"".equals(x.trim())).toArray(); Stack numStack = new Stack(); Stack operatorStack = new Stack(); numStack.push(numArr[0]); StringBuffer sb = new StringBuffer(); for (int i = 0; i < operators.length; i++) { int number = Integer.parseInt(numArr[i + 1]); String operator = operators[i].toString(); if (!operatorStack.isEmpty() && Operator.compare(operatorStack.peek().toString(),operator)<0) { String currentResult = numStack.pop()+" "+number+operator; numStack.push(currentResult); } else if(!operatorStack.isEmpty() && Operator.compare(operatorStack.peek().toString(),operator)>=0){ Object b = numStack.pop(); Object a = numStack.pop(); String currentOperator = operatorStack.pop().toString(); String result = a+" "+b+currentOperator; numStack.push(result); numStack.push(number); operatorStack.push(operator); }else { numStack.push(number); operatorStack.push(operator); } } while (!operatorStack.isEmpty()) { Object b = numStack.pop(); Object a = numStack.pop(); String operator = operatorStack.pop().toString(); String result = a+" "+b+operator; numStack.push(result); } return numStack.pop().toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } public static void main(String[] args) { String s = InfixToPostfix.convert("3*20+12*5-40/2"); System.out.println(s); } }