package com.coding.basic.stack.expr; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class InfixToPostfix { public static List<Token> convert(String expr) { // 3*20+12*5-40/2 --> 3 20 * 12 5 * + 40 2 / - // 10-30+50 --> 10 30 - 50 + List<Token> ret = new ArrayList<>(); TokenParser parser = new TokenParser(); List<Token> tokens = parser.parse(expr); Stack<Token> opStack = new Stack<>(); for(Token token : tokens){ if(token.isNumber()){ ret.add(token); }else{ while(!opStack.isEmpty() && opStack.peek().hasHigherPriority(token)){ ret.add(opStack.pop()); } opStack.push(token); } } while(!opStack.isEmpty()){ ret.add(opStack.pop()); } return ret; } public static String toString(List<Token> tokens){ StringBuilder sb = new StringBuilder(); for(Token token : tokens){ sb.append(token.value); } return sb.toString(); } public static void main(String[] args) { System.out.println(toString(convert("10-30+50"))); System.out.println(toString(convert("3*20+12*5-40/2"))); } }