java实现 中缀转后缀

2014-11-24 03:24:27 · 作者: · 浏览: 0

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);
}
/**
* (出栈 www.2cto.com
* @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();

}
}

摘自 spy1403414807的专栏