JAVA中缀表达式转后缀表达式
来源:互联网 发布:linuxshell编程实例 编辑:程序博客网 时间:2024/05/29 09:51
基于前述文章,将代码改写,把中缀表达式转为后缀表达式
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 == '(' || 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; } }}
0 0
- Java中缀转后缀表达式
- java中缀表达式转后缀表达式
- java 中缀表达式转后缀表达式
- JAVA中缀表达式转后缀表达式
- 中缀表达式转后缀表达式--Java
- Java中缀表达式转后缀表达式
- java中缀表达式转后缀表达式
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 对拍程序
- AndroidStudio导入项目后报错
- 浅析Linux下文件和目录权限
- javaweb错误
- hmailserver批量添加用户
- JAVA中缀表达式转后缀表达式
- 右边圆角
- Linux Netfilter实现机制和扩展技术
- (五)图
- 图片url地址为空时出现小圆框占位符
- IntelliJ IDEA平台下JNI编程(五)—本地C代码创建Java对象及引用
- visual studio2008 pdb文件
- Quartz2.x增、删、改工具类
- POJ2299 Ultra-QuickSort(归并排序,求逆序数)