RSQL兼容空值问题

前言

由于居人篱下,前端不愿意兼容空值问题,终于要解决这个问题了,问题如下:

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

你可能感兴趣的:(RSQL兼容空值问题)