java实现 中缀转后缀

package cn.itcast.action;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Expression {

 private Stack stack;
 //输入的表达式
 private String input;
 //输出道arraylist
 private ArrayList arrayList;
 //记录数字的数组
 private String num;
 
 public Expression(){
  stack=new Stack();
  arrayList=new ArrayList();
  num="";
 }
 public void setInput(String input){
  this.input=input;
 }
 public String getInput(){
  return input;
 }
 
  /**
  * 将中缀表达式转换为后缀表达式的处理方法
  * @param input 中缀表达式 2+3
  * @return 后缀表达式 23+
  */


 public ArrayList doTrans(String input)throws Exception{
  if(!validate(input))
  {
   throw new Exception("");
  }
  this.setInput(input);
  for(int i=0;i   { 
 //a*(b+c)/d+e
   String s=String.valueOf(input.charAt(i));
   if(s.equals("+")||s.equals("-"))
   {
    if(!num.equals("")){
     arrayList.add(num);
     num="";
    }
    getOperator(s,1);
   }
   else if(s.equals("*")||s.equals("/"))
   {
    if(!num.equals(""))
    {
     arrayList.add(num);
     num="";
    }
    getOperator(s,2);
   }
   else if(s.equals("("))
   {
    if(!num.equals(""))
    {
     arrayList.add(num);
     num="";
    }
    stack.push(s);
   }
   else if(s.equals(")"))
   {
    if(!num.equals(""))
    {
     arrayList.add(num);
     num="";
    }
    getOperator(s);
   }
   else
   {
    num+=s;
   }
   if(i==input.length()-1&&!num.equals(""))
   {
    arrayList.add(num);
   }
  }
  while(!stack.empty())
  {
   arrayList.add(stack.pop());
  }
  return arrayList;
 }
 /**
  * 判断运算符是否出栈
  * 算术运算符(this)  (1) 栈为空 直接推入this.(2)栈非空 反复弹出一项 若项为( 将(推入栈中,将this推入栈中.(3)栈非空 反复弹出一项 若项为top且top=this输出top.推入this
  * @param opthis 当前运算符
  * @param prec 运算符等级 1 为+ -, 2 为 *,/
  */
 public void getOperator(String opthis,int prec)
 {
  while(!stack.empty())
  {
   String top=stack.pop();
   if(top.equals("("))
   {
    stack.push(top);
    break;
   }
   else
   {
    int precX;
    if(top.equals("+")||top.equals("-"))
    {
     precX=1;
    }
    else
    {
     precX=2;
    }
    if(precX     {
     stack.push(top);
     break;
    }
    else
    {
     arrayList.add(top);
    }
   }
  }
  stack.push(opthis);
 }
 /**
  * (出栈
  * @param opthis
  */
 public void getOperator(String opthis)
 {
  while(!stack.empty())
  {
   String top=stack.pop();
   if(top.equals("("))
   {
    break;
   }
   else
   {
    arrayList.add(top);
   }
  }
 }
 /**
  * 输入表达式的验证方法(没写)
  * @param input
  * @return
  */
 public boolean validate(String input)
 {
  boolean b=true;
  if(!isEmpty(input))
  {
   b=false;
  }
  return b;
 }
 /**
  * 判断输入表达式是否为空
  * @param input
  * @return
  */
 private boolean isEmpty(String input)
 {
  boolean b=true;
  if(input==null||input.length()==0)
  {
   b=false;
  }
  return b;
 }
 public String display(){
  String displayStr="";
  for(int i=0;arrayList!=null&&i   {
   displayStr+=(String)arrayList.get(i);
  }
  System.out.print(displayStr);
  return displayStr;
 }
 
 public static void main(String args[]) throws IOException
 {
  Expression expression=new Expression();  
  
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  String input=br.readLine();


  try
  {
    expression.doTrans(input);
  }
  catch(Exception ex)
  {
   System.err.print(ex.toString());
  }
  expression.display();
  
 }
}





你可能感兴趣的:(java)