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
原创粉丝点击