JAVA中缀表达式转后缀表达式
2017-03-23 17:15
225 查看
基于前述文章,将代码改写,把中缀表达式转为后缀表达式
package com.后缀表达式; import java.util.ArrayList; import java.util.Stack; public class 生成后缀表达式 { public static void main(String[] args) { System.out.println(generate("8547*92+(1+2)")); } public static String bracketGet(String s, int k) { int m=0; int i; String[] arr=convert(s); for(i=k;i<arr.length;i++){ if(arr[i].equals("(")){ m++; continue; } if(arr[i].equals(")")){ m--; if(m==0) break; else continue; } } StringBuilder sb=new StringBuilder(); for(int j=k+1;j<i;j++){ sb.append(arr[j]); } return sb.toString(); } public static String generate(String formula) { String[] arr = convert(formula); StringBuffer buffer = new StringBuffer(); Stack<String> op = new Stack<>(); for (int i = 0; i < arr.length; i++) { if (arr[i].equals("(")) { buffer.append(generate(bracketGet(formula, i))); i = i + bracketGet(formula, i).length() + 1; } else if (arr[i].equals("+") || arr[i].equals("-") || arr[i].equals("*") || arr[i].equals("/")) { while (!op.isEmpty() && opcompare2(op.lastElement(), arr[i])) { buffer.append(op.pop()+" "); } op.push(arr[i]); } else buffer.append(arr[i]+" "); } while (!op.isEmpty()) { buffer.append(op.pop()+" "); } return buffer.toString(); } public static String[] convert(String s) { ArrayList<String> arrayList = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { if (!opjudge(s.charAt(i))) { int j = i; while ((i < s.length()) && !opjudge(s.charAt(i))) i++; arrayList.add(s.substring(j, i)); i--; } else arrayList.add(String.valueOf(s.charAt(i))); } return arrayList.toArray(new String[arrayList.size()]); } public static boolean opjudge(char c) { if (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || 94ae c == ')') return true; else return false; } public static int opvalue2(String s) { switch (s) { case "+": return 1; case "-": return 2; case "*": return 3; case "/": return 4; default: return -1; } } public static boolean opcompare2(String s1, String s2) { if (opvalue2(s1) >= opvalue2(s2)) return true; else { return false; } } }
相关文章推荐
- 【算法】中缀表达式、后缀表达式的java实现几网上观点的勘误。
- java算术表达式求值-中缀表达式转后缀表达式
- 中缀表达式转后缀表达式--Java
- java中的栈Stack的基本使用和应用(二) ——利用栈计算合法的算术表达,中缀表达式转后缀表达式
- Java 栈实现中缀表达式转后缀表达式
- java将中缀表达式转为后缀表达式
- Java中缀表达式转后缀表达式
- Java实现中缀表达式转后缀表达式并计算结果
- 【加减乘】 dfs+中缀表达式转后缀表达式 Java
- 中缀表达式转后缀表达式详解(Java描述)
- Java堆栈的应用2----------中缀表达式转为后缀表达式的计算Java实现
- java实现中缀表达式转后缀表达式并且计算
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- java将中缀表达式转为后缀表达式
- 利用JAVA实现中缀表达式向后缀表达式的转换,并求出表达式的值
- java实现中缀表达式转后缀表达式并且计算
- java实现中缀表达式转后缀表达式并且计算
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 数据结构与算法Java版——中缀表达式转后缀表达式
- 【java】中缀表达式转后缀表达式 java实现