package easynotation;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class PolandNonation_V1 {
public static void main(String[] args) {
String infixExpression = "10+((2+3)*4)-5";
List<String> strListByString = getStrListByString(infixExpression);
System.out.println(strListByString);
List<String> sufixExpression = getSufixExpression(strListByString);
System.out.println(sufixExpression);
int result = PolandNotation.getCalcluationResult(sufixExpression);
System.out.println(result);
}
public static List<String> getStrListByString(String str){
List<String> list = new ArrayList<>();
int i = 0;
String tempStr = new String();
char c;
do{
if((c = str.charAt(i)) < 48 || (c = str.charAt(i)) > 57){
list.add("" + c);
i++;
}else{
tempStr = "";
while (i < str.length() && (c = str.charAt(i)) >= 48 && (c = str.charAt(i)) <= 57){
tempStr += c;
i++;
}
list.add(tempStr);
}
}while (i < str.length());
return list;
}
public static List<String> getSufixExpression(List<String> inFixExpression){
Stack<String> s1 = new Stack<>();
List<String> s2 = new ArrayList<>();
for (String item : inFixExpression) {
if(item.matches("\\d+")){
s2.add(item);
} else if(item.equals("(")){
s1.push(item);
}else if(item.equals(")")){
while (!s1.peek().equals("(") && s1.size() > 0){
s2.add(s1.pop());
}
s1.pop();
}else{
while (s1.size() != 0 && !s1.peek().equals("(") &&
Operation.getOperationPriority(s1.peek()) >= Operation.getOperationPriority(item)){
s2.add(s1.pop());
}
s1.push(item);
}
}
while (s1.size() != 0){
s2.add(s1.pop());
}
return s2;
}
}
class Operation{
public static final int ADD = 1;
public static final int SUB = 1;
public static final int MUL = 2;
public static final int DIV = 2;
public static int getOperationPriority(String Operation){
int result = 0;
switch (Operation){
case "+":
result = ADD;
break;
case "-":
result = SUB;
break;
case "*":
result = MUL;
break;
case "/":
result = DIV;
break;
default:
System.out.println("输入的运算符有误!");
}
return result;
}
}