前言
由于居人篱下,前端不愿意兼容空值问题,终于要解决这个问题了,问题如下:
String rsql = "(name== or productItems.internationalBarCode== or productItems.internationalBarCode==) and status== and categories.id== and status!=DELETE";
//形态2
String rsql2 = "(name==,productItems.internationalBarCode==,productItems.internationalBarCode==);status==;categories.id==;status!=DELETE";
在这条rsql()里面只有一个status是带了值的。其它都需要清除。
那么正则是跑不掉了。
解决
1.思路
==后面为结束或带有操作符合判断为空值字段,删除改字段到开始或连同前面的操作符号
2.代码
/**
* 思路 ==后面为结束或带有操作符合判断为空值字段,删除改字段到开始或连同前面的操作符号
*/
private static Pattern emptyValuePattern = Pattern.compile("((;|,|\\(){0,1}[A-Za-z0-9.]{0,}(==|!=|<|>){1,1}" +
"(;|,| and | or |\\)|$){1})");
/**
* 尾部操作符合清除
*/
private static Pattern headTailOperationPattern = Pattern.compile("^(;|,| and | or )|(;|,| and | or )$");
/**
* 清除空值字段
*/
public static String emptyValueClean(String rsql){
Matcher matcher = emptyValuePattern.matcher(rsql);
while (matcher.find()){
String dateTimeStr = matcher.group();
dateTimeStr = dateTimeStr.replace("(","");
dateTimeStr = dateTimeStr.replace(")","");
System.out.println(dateTimeStr);
rsql = rsql.replace(dateTimeStr,"");
}
//清除空括号
rsql = rsql.replace("()","");
//清除头尾操作符合
Matcher uselessOperatorMatcher = headTailOperationPattern.matcher(rsql);
while (uselessOperatorMatcher.find()){
String temp = uselessOperatorMatcher.group();
rsql = rsql.replace(temp,"");
}
return rsql;
}
网友评论