java输入字符串输出计算结果
System.out.println("start");
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
String num = "";
Stack<String> stackNum = new Stack<>();
Stack<String> stackOpt = new Stack<>();
for (int i = 0; i < str.length(); i++) {
if (str.substring(i,i+1).matches("[+-/*()]")) {
if (num != "") {
stackNum.push(num);
num = "";
}
if (stackOpt.isEmpty() || stackOpt.peek().equals("(") || str.substring(i,i+1).equals("(")) {
stackOpt.push(str.substring(i,i+1));
}
else if (!str.substring(i,i+1).equals(")")) {
if (str.substring(i,i+1).equals("*")) {
while (!stackOpt.isEmpty()) {
if (!stackOpt.peek().equals("(") && stackOpt.peek().equals("/")) {
stackNum.push(stackOpt.pop());
} else if (!stackOpt.peek().equals("(") && stackOpt.peek().equals("*")) {
stackNum.push(stackOpt.pop());
} else {
break;
}
}
stackOpt.push(str.substring(i,i+1));
} else if (str.substring(i,i+1).equals("/")) {
while (!stackOpt.isEmpty()) {
if (!stackOpt.peek().equals("(") && stackOpt.peek().equals("*")) {
stackNum.push(stackOpt.pop());
} else if (!stackOpt.peek().equals("(") && stackOpt.peek().equals("/")) {
stackNum.push(stackOpt.pop());
} else {
break;
}
}
stackOpt.push(str.substring(i,i+1));
} else if (str.substring(i,i+1).equals("+")) {
while (!stackOpt.isEmpty()) {
if (!stackOpt.peek().equals("(")) {
stackNum.push(stackOpt.pop());
} else {
break;
}
}
stackOpt.push(str.substring(i,i+1));
} else if (str.substring(i,i+1).equals("-")) {
while (!stackOpt.isEmpty()) {
if (!stackOpt.peek().equals("(")) {
stackNum.push(stackOpt.pop());
} else {
break;
}
}
stackOpt.push(str.substring(i,i+1));
}
} else {
while (!stackOpt.peek().equals("(")) {
stackNum.push(stackOpt.pop());
}
stackOpt.pop();
}
} else {
num = num.concat(str.substring(i,i+1));
if (i == str.length()-1) {
stackNum.push(num);
}
}
}
while (!stackOpt.isEmpty()) {
stackNum.push(stackOpt.pop());
}
Stack<String> stack = new Stack<>();
while (!stackNum.isEmpty()) {
stack.push(stackNum.pop());
}
Stack<Integer> result = new Stack<>();
int first = 0;
int second = 0;
int calculate = 0;
while (!stack.isEmpty()) {
if (!stack.peek().matches("[+-/*]")) {
result.push(Integer.parseInt(stack.pop()));
} else if (stack.peek().equals("+")) {
stack.pop();
first = result.pop();
second = result.pop();
calculate = first + second;
result.push(calculate);
} else if (stack.peek().equals("-")) {
stack.pop();
first = result.pop();
second = result.pop();
calculate = second - first;
result.push(calculate);
} else if (stack.peek().equals("*")) {
stack.pop();
first = result.pop();
second = result.pop();
calculate = first * second;
result.push(calculate);
} else if (stack.peek().equals("/")) {
stack.pop();
first = result.pop();
second = result.pop();
calculate = second / first;
result.push(calculate);
}
}
System.out.println(result.pop());