public class StackPra {
public static void main(String[] args) {
String s = "( 1 + ( ( 2 + 11 ) * ( 20 * 5 ) ) )";
HashMap<String, String> opeMap = new HashMap<>();
opeMap.put("+", "1");
opeMap.put("-", "1");
opeMap.put("*", "1");
opeMap.put("/", "1");
Stack<String> numSta = new Stack<>();
Stack<String> operatorSta = new Stack<>();
String[] all = s.split(" ");
for (int i = 0; i < all.length; i++) {
if (all[i].equals("(")) {
continue;
} else if (opeMap.get(all[i]) != null && opeMap.get(all[i]).equals("1")) {
operatorSta.push(all[i]);
} else if (all[i].equals(")")) {
calculateNums(numSta, operatorSta);
} else {
numSta.push(all[i]);
}
}
System.out.println(numSta.pop());
}
private static void calculateNums(Stack<String> numSta, Stack<String> operatorSta) {
String ope = operatorSta.pop();
int lateNum = Integer.parseInt(numSta.pop());
int earNum = Integer.parseInt(numSta.pop());
if (ope.equals("+")) {
lateNum = lateNum + earNum;
}
if (ope.equals("-")) {
lateNum = earNum - lateNum;
}
if (ope.equals("*")) {
lateNum = lateNum * earNum;
}
if (ope.equals("/")) {
lateNum = earNum / lateNum;
}
numSta.push(Integer.toString(lateNum));
}
}
使用栈来处理计算表达式的字符串
最新推荐文章于 2024-05-06 18:00:52 发布