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;
}
}