aviator 属实搞事情

简介: aviator 属实搞事情

简单说下配置的内容吧, 这个表达式格式真的折磨人

import com.alibaba.fastjson.JSON;
import com.googlecode.aviator.AviatorEvaluator;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public String strJoin(String split){
        StringUtils.join(split, "'=='");
        System.out.println("split >>> "+split);
        return split;
    }
    public String strReplace(String strvalue){
        strvalue = strvalue.replace(" ","");
        if(!strvalue.contains("(")){
            strvalue = "'"+strvalue.replace("==","'=='")+"'";
            strvalue = strvalue.replace("||","'||'");
            strvalue = strvalue.replace("&&","'&&'");
        }else{
            strvalue = strvalue.replace("(","('");
            strvalue = strvalue.replace("==","'=='");
            strvalue = strvalue.replace(")","')");
            strvalue = strvalue.replace("||","'||'");
            strvalue = strvalue.replace("&&","'&&'");
        }
        return strvalue;
    }
    public String strChange(String groups) {
        StringBuffer groupsSplit = new StringBuffer();
        String result = "";
        // String groups = "dfffdsfd == 学习";
        String[] split = groups.split("==");
        for (int i = 0; i < split.length; i++) {
            if (!"".equals(split[i]) && split[i] != null) {
                groupsSplit.append("'" + split[i] + "'==");
            }
        }
        result = groupsSplit.toString();
        String tp = result.substring(result.length() - 2, result.length());
        if ("==".equals(tp)) {
            result = result.substring(0, result.length() - 2);
        }
        result = result.replace(" ", "");
        return result;
    }
 private boolean checkIfLogic(String expr, Map<String, String> valuesMap) {
        try {
            Map<String, Object> jsonMap = (Map<String, Object>) JSON.parse(expr);
            List<String> expression = null;
            if (null != jsonMap && jsonMap.size() > 0) {
                expression = (List<String>) jsonMap.get("expression");
            }
            expr = org.apache.commons.lang3.StringUtils.join(expression.toArray(), " ");
            StringSubstitutor sub = new StringSubstitutor(valuesMap);
            String resolvedString = sub.replace(expr);
            if (com.cmit.testing.utils.StringUtils.isNotEmpty(resolvedString)) {
                System.out.println(" 替换前的表达式 ==="+resolvedString);
                if (resolvedString.indexOf("'") == -1 && resolvedString.contains("==")) {
                    resolvedString = strReplace(resolvedString);
                    System.out.println(" 替换后的表单时==="+resolvedString);
                    // resolvedString = strChange(resolvedString);
                    // resolvedString = strJoin(resolvedString);
                }
                System.out.println(" 执行的表达式 >>>> resolvedString >>>  " + resolvedString);
                try {
                    Boolean b = (Boolean) AviatorEvaluator.execute(resolvedString);
                    System.out.println("b >>>" + b);
                    return b;
                } catch (Exception e) {
                    System.out.println("AviatorEvaluator 解析表达式异常 >>> " + e.getMessage());
                }
            }
        } catch (Exception e) {
            System.out.println("StringSubstitutor 解析表达式异常 >>> " + e.getMessage());
        }
        return false;
    }

测试

public static void main(String[] args) {
        Test_C c = new Test_C();
        Boolean bs = (boolean) AviatorEvaluator.execute("'1356969696a' == '1356969696' || '1356969696a' == '1356969696a' || ''==\"''\"");
        Boolean bastt = (boolean) AviatorEvaluator.execute("'1356969696a' == '1356969696' || '1356969696a' == '1356969696a' || ''==''");
        System.out.println("bastt >>>" + bastt);
        boolean bst = (boolean) AviatorEvaluator.execute("'1356969696' == '1356969696' || '1356969696' == '1356969696a' || 1356969696==\"''\"");
        System.out.println(bs + "," + bst);
        // String expr1 = "{\"expression\":[\"'${account}'\",\"==\",\"''\"]}";
        String expr1 = "{\"expression\":[\"(${account}\",\"==\",\"yhs123456789101112%)\",\"||\",\"${account}\",\"==\",\"yhs1234567891011121314151617181\"]}";
        String expr2 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\",\"||\",\"(${account}\",\"==\",\"234242425)\",\"||\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"(${account}\",\"==\",\"uttueuedd22811122333)\"]}";
        String expr3 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\",\"||\",\"${account}\",\"==\",\"234242425\",\"||\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"${account}\",\"==\",\"eteeessss3222\"]}";
        String expr4 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\"]}";
        // String expr1 = "{\"expression\":[\"('${account}'\",\"==\",\"'yhs123456789101112%')\",\"||\",\"'${account}'\",\"==\",\"'yhs1234567891011121314151617181'\"]}";
        System.out.println(expr1);
        Map<String, String> valuesMap1 = new HashMap<>();
        valuesMap1.put("account", "234242425");
        boolean f = c.checkIfLogic(expr1, valuesMap1);
        System.out.println("f >>>" + f);
        }

测试结果


至此结束, 替换的结果真不是很好, 这个处理造成很大的问题。有左右括号时,就替换有问题。还在想着怎么弄,感觉还是挺这折腾的。


目录
相关文章
|
5月前
|
设计模式 程序员
故意把代码写得很烂,这样的 “防御性编程“ 可取吗?
故意把代码写得很烂,这样的 “防御性编程“ 可取吗?
|
7月前
|
Java Go Windows
go语言实现加减法出题器(再也不用担心孩子学习了)
go语言实现加减法出题器(再也不用担心孩子学习了)
|
8月前
|
IDE 安全 程序员
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
50 1
|
8月前
|
JavaScript 前端开发 Java
万万没想到,'this'关键字的真正威力
万万没想到,'this'关键字的真正威力
74 1
|
人工智能 程序员 vr&ar
竟有程序员40了还在撸代码?
竟有程序员40了还在撸代码?
162 2
|
人工智能 IDE 算法
【周末闲谈】新的编程方式,程序员的未来何在?
【周末闲谈】新的编程方式,程序员的未来何在?
138 0
|
存储 编译器 C语言
C语言的冷门知识(查漏补缺持续更新ing......)
C语言的冷门知识(查漏补缺持续更新ing......)
|
算法 NoSQL API
到底该不该看源码(懂这三点儿就够了)
1、不要为了看源码而看源码 2、代码积累到一定程度,遇到问题自然就去查源码了,然后你就看懂了 3、两年内不要刻意去看源码,可以点开简单了解一下就行,前两年疯狂做项目就行了,后期项目做的多了,你自己就会有疑问,每次写代码就会问自己为什么要这样写?底层的原理是什么?很自觉的带着问题就去看源码了,如果你没有这样的疑问,那说明你也不适合去看源码了,写写业务代码,了了一生
206 0
|
Rust Java 机器人
是 Rust 太难了,还是主流编程本来就这么折磨人?
本文作者在文章的前部分用了大量笔墨详细描述了自己尝试 Rust 受挫的经历,后半部分分析了 Rust 的问题及发展。自发布以来,这篇文章在 r/rust 上得到了 500 多个赞,在 HN 上有 700 多条评论。我们将其翻译出来,以飨读者,也希望大家可以理性讨论。
586 0
是 Rust 太难了,还是主流编程本来就这么折磨人?
|
程序员
程序人生 - 程序员要学点儿理财知识,而不仅仅是代码技巧
程序人生 - 程序员要学点儿理财知识,而不仅仅是代码技巧
145 0
程序人生 - 程序员要学点儿理财知识,而不仅仅是代码技巧