import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
/*
来 自*
n o w j a v a . c o m
*/
public class Main {
private static String convertToPostfix(String expr) {
Map<Character, Integer> opPrecedence = new HashMap<>();
opPrecedence.put('+', 0);
opPrecedence.put('-', 0);
opPrecedence.put('*', 1);
opPrecedence.put('/', 1);
Stack<Character> stack = new Stack<>();
String output = "";
int i = 0;
while (i < expr.length()) {
char cur = expr.charAt(i);/*时 代 Java - nowjava.com 提供*/
if (cur == ' ') {
++i;
continue;
}
if (Character.isDigit(cur)) {
String numStr = "";
while (i < expr.length() && Character.isDigit(expr.charAt(i))) {
numStr += expr.charAt(i);
++i;
}
output += numStr;
output += ' ';
continue;
}
if (cur == '(') {
stack.push(cur);
++i;
continue;
}
if (cur == ')') {
while (!stack.empty() && stack.peek() != '(') {
output += stack.pop();
output += ' ';
}
if (stack.empty()) {
throw new IllegalArgumentException("Invalid expression");
}
stack.pop();
++i;
continue;
}
if (cur == '+' || cur == '-' || cur == '*' || cur == '/') {
while (!stack.empty() && opPrecedence.containsKey(stack.peek())
&& opPrecedence.get(stack.peek()) >= opPrecedence.get(cur)) {
output += stack.pop();
output += ' ';
}
stack.push(cur);
++i;
continue;
}
throw new IllegalArgumentException("Invalid expression");
}
while (!stack.empty()) {
/**代码未完, 请加载全部代码(NowJava.com).**/
本文系作者在时代Java发表,未经许可,不得转载。如有侵权,请联系nowjava@qq.com删除。