www.pudn.com > Operate2.rar > Expression.java


 
public class Expression { 
	 
	private String expression; 
	 
	private int operation = -1; 
	private String operstring; 
	private Parameter parameter1; 
	private Parameter parameter2; 
	private Expression subExpression; 
	private int	partnership = 0;//对称关系 
	 
	public Expression(){ 
	} 
 
	public Expression(String parameter) { 
		this.expression =parameter.trim(); 
	} 
	 
	//将表达式中的值与操作符分开 
	public void Analyse(){ 
		if (!Bracket(expression)){ 
			WrongPrint(); 
			return; 
		} 
		String part1 = null; 
		String part2 = null; 
		char a; 
		int location_And,location_Or,location_Not,location_Like,location_External; 
		//先找表达式中的关键字 
		location_And =expression.lastIndexOf("AND"); 
		if(location_And != -1 && location_And != 0){ 
			a = expression.charAt(location_And - 1); 
			if (( a<'z' && a>'a' ) || (a<'Z' && a>'A')){ 
				location_And = -1 ; 
			} 
		} 
		location_Or =expression.lastIndexOf("OR"); 
		if(location_Or != -1 && location_Or != 0){ 
			a = expression.charAt(location_Or - 1); 
			if (( a<'z' && a>'a' ) || (a<'Z' && a>'A')){ 
				location_Or = -1 ; 
			} 
		} 
		location_Not =expression.lastIndexOf("NOT"); 
		if(location_Not != -1 && location_Not != 0){ 
			a = expression.charAt(location_Not - 1); 
			if (( a<'z' && a>'a' ) || (a<'Z' && a>'A')){ 
				location_Not = -1 ; 
			} 
		} 
		location_Like =expression.lastIndexOf("LIKE"); 
		if(location_Like != -1 && location_Like != 0){ 
			a = expression.charAt(location_Like - 1); 
			if (( a<'z' && a>'a' ) || (a<'Z' && a>'A')){ 
				location_Like = -1 ; 
			} 
		} 
		location_External =expression.lastIndexOf("EXTERNAL"); 
		if(location_External != -1 && location_External != 0){ 
			a = expression.charAt(location_External - 1); 
			if (( a<'z' && a>'a' ) || (a<'Z' && a>'A')){ 
				location_External = -1 ; 
			} 
		} 
		int max = 0; 
		max = MAX(max,location_And,location_Or,location_Not,location_Like,location_External); 
		operation = MAX(location_And,location_Or,location_Not,location_Like,location_External); 
		if (max != 0){ 
			a = expression.charAt(max - 1); 
			if (( a>'z' || a<'a' ) && (a>'Z' || a<'A')){ 
				part1 = expression.substring(0,max - 1); 
				operstring = OperConsts.Keywords[operation]; 
				part2 = expression.substring(max + operstring.length()).trim(); 
			}				 
		} 
		//表达示中的运算符 
		if (part1==null || part2 == null){ 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
		}/* 
		 
		int startbracket ;//括号开始的位置 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		 
		for (int i = 0 ;i < expression.length();i++){ 
			for (int j = 0; j expression.length()){ 
					System.out.println("输入错误"); 
					return; 
				} 
				if ( startbracket == 0 && i == expression.length()){//如果整个表达式都包括在一个括号里 
					this.expression = expression.substring(1,expression.length()-1).trim(); 
					Analyse(); 
				} 
				else if (startbracket == 0){//括号只包括前面一部分 
					part1 = expression.substring(1, i-1).trim(); 
				} 
				else if (i == expression.length()){//括号只包括后面一部分 
					part2 = expression.substring(startbracket+1,i-1).trim(); 
				} 
				else {//括号在表达式中间 
					//Todo 
				} 
				 
			} 
			 
			 
		}*/ 
		System.out.println(part1); 
		System.out.println(part2); 
		parameter1 = new Parameter(part1); 
		if (parameter1.IsExpression()){ 
			subExpression = parameter1.Expression(); 
			subExpression.Analyse(); 
		} 
			 
		 
		parameter2 = new Parameter(part2); 
		if (parameter2.IsExpression()){ 
			subExpression = parameter2.Expression(); 
			subExpression.Analyse(); 
		} 
	} 
	 
	//	判断括号是不是对称的 
	public boolean Bracket(String expression){ 
		for (int i = 0 ;i < expression.length();i++){ 
			if (expression.substring(i,i)== "(") 
				partnership++; 
			if (expression.substring(i,i)== ")"){ 
				partnership--; 
				if (partnership < 0) 
					return false; 
			}				 
		} 
		if (partnership == 0) 
			return true; 
		else  
			return false; 
	} 
	 
	private void WrongPrint(){//输出函数 
		System.out.println("输入错误"); 
	} 
	 
	private int MAX(int a,int b,int c,int d,int e,int f){//取最大值函数 
		if(a < b) a = b; 
		if(a < c) a = c; 
		if(a < d) a = d; 
		if(a < e) a = e; 
		if(a < f) a = f; 
		return a;		 
	} 
	 
	private int MAX(int b,int c,int d,int e,int f){//取最大值函数 
		if (b>c && b>d && b>e && b>f) return 0; 
		if (c>b && c>d && c>e && c>f) return 1; 
		if (d>c && d>b && d>e && d>f) return 2; 
		if (e>c && e>d && e>b && e>f) return 3; 
		if (f>c && f>d && f>e && f>b) return 4; 
		else return -1; 
	} 
	 
	 
}