博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java字符串转算术表达式
阅读量:2286 次
发布时间:2019-05-09

本文共 2695 字,大约阅读时间需要 8 分钟。

转载: 

import java.util.ArrayList;import java.util.Stack; /** *  * @author arthur * */public class Calculate {		public ArrayList
getStringList(String str){ ArrayList
result = new ArrayList
(); String num = ""; for (int i = 0; i < str.length(); i++) { if(Character.isDigit(str.charAt(i))){ num = num + str.charAt(i); }else{ if(num != ""){ result.add(num); } result.add(str.charAt(i) + ""); num = ""; } } if(num != ""){ result.add(num); } return result; } /** * 将中缀表达式转化为后缀表达式 * @param inOrderList * @return */ public ArrayList
getPostOrder(ArrayList
inOrderList){ ArrayList
result = new ArrayList
(); Stack
stack = new Stack
(); for (int i = 0; i < inOrderList.size(); i++) { if(Character.isDigit(inOrderList.get(i).charAt(0))){ result.add(inOrderList.get(i)); }else{ switch (inOrderList.get(i).charAt(0)) { case '(': stack.push(inOrderList.get(i)); break; case ')': while (!stack.peek().equals("(")) { result.add(stack.pop()); } stack.pop(); break; default: while (!stack.isEmpty() && compare(stack.peek(), inOrderList.get(i))){ result.add(stack.pop()); } stack.push(inOrderList.get(i)); break; } } } while(!stack.isEmpty()){ result.add(stack.pop()); } return result; } /** * 计算后缀表达式 * @param postOrder * @return */ public Integer calculate(ArrayList
postOrder){ Stack stack = new Stack(); for (int i = 0; i < postOrder.size(); i++) { if(Character.isDigit(postOrder.get(i).charAt(0))){ stack.push(Integer.parseInt(postOrder.get(i))); }else{ Integer back = (Integer)stack.pop(); Integer front = (Integer)stack.pop(); Integer res = 0; switch (postOrder.get(i).charAt(0)) { case '+': res = front + back; break; case '-': res = front - back; break; case '*': res = front * back; break; case '/': res = front / back; break; } stack.push(res); } } return (Integer)stack.pop(); } /** * 比较运算符等级 * @param peek * @param cur * @return */ public static boolean compare(String peek, String cur){ if("*".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){ return true; }else if("/".equals(peek) && ("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){ return true; }else if("+".equals(peek) && ("+".equals(cur) || "-".equals(cur))){ return true; }else if("-".equals(peek) && ("+".equals(cur) || "-".equals(cur))){ return true; } return false; } public static void main(String[] args) { Calculate calculate = new Calculate(); String s = "12+(23*3-56+7)*(2+90)/2"; ArrayList result = calculate.getStringList(s); //String转换为List result = calculate.getPostOrder(result); //中缀变后缀 int i = calculate.calculate(result); //计算 System.out.println(i); } }

 

你可能感兴趣的文章
树结构的基础部分
查看>>
二叉树
查看>>
二叉树——查找指定节点
查看>>
二叉树删除节点
查看>>
顺序存储二叉树
查看>>
顺序存储二叉树——线索化二叉树
查看>>
2019年在上海的最后一天,2020年新开始的一年
查看>>
遍历线索化二叉树
查看>>
二叉树——堆排序
查看>>
赫夫曼树-哈夫曼树-霍夫曼树
查看>>
霍夫曼树——霍夫曼编码
查看>>
霍夫曼编码的应用——压缩数据
查看>>
霍夫曼编码的应用——解压数据
查看>>
解压文件与压缩文件(IO流操作)(第三部分结尾)
查看>>
二叉排序树(BST)
查看>>
平衡二叉树(AVL树)
查看>>
多路查找
查看>>
图的深度优先遍历(java实现,简单易懂)
查看>>
图的广度优先遍历
查看>>
二分算法
查看>>