字符串表达式 不支持符号多目运算

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        String s = "(1<=point_a0q9r5s9z1m7m0i6v9<=2||3<=point_a1w4m1z4p2e5e1a3r4<=4)&&(point_b0u7u6l0t0q8f6o9o2==1)&&(point_e4r0m7a3t7v3n6j4b9==1)&&(5<=point_b1t2l0a0d6j2l5n0k8<=6)";

        engine.put("point_a0q9r5s9z1m7m0i6v9", 2);
        engine.put("point_a1w4m1z4p2e5e1a3r4", 5);
        engine.put("point_b0u7u6l0t0q8f6o9o2", 1);
        engine.put("point_e4r0m7a3t7v3n6j4b9", 1);
        engine.put("point_b1t2l0a0d6j2l5n0k8", 7);
        Object eval = engine.eval(s);
        System.out.println(eval);

其实应该为false

以上用的是ScriptEngine,我还试了很多exp4j、Groovy、JEP、JEXL 、hutool

只能手写处理一下字符串

demo如下

    private String handleCondition(String s){
        List<String> list = new ArrayList<>(3);
        list.add("<");
        list.add(">");
        list.add("=");
        s=s.replaceAll(" ","");
        StringBuilder sb = new StringBuilder();

        while(s.contains(StrUtil.DELIM_START)){

            int startIndex = s.indexOf(StrUtil.DELIM_START);
            int endIndex = s.indexOf(StrUtil.DELIM_END);

            boolean startFlag = list.contains(s.substring(startIndex-1, startIndex));
            boolean endFlag = list.contains(s.substring(endIndex+1, endIndex + 2));

            System.out.println("startFlag = " +startFlag);
            System.out.println("endFlag = " + endFlag);
            if(startFlag && endFlag){
                sb.append(s.substring(0,endIndex+1)).append("&&").append(s.substring(startIndex,endIndex+1));
            }else {
                sb.append(s.substring(0,endIndex+1));
            }
            s = s.substring(endIndex+1);

        }
        sb.append(s);
        String result = sb.toString();
        result = result.replaceAll("\\{", "").replaceAll("\\}", "");
        System.out.println("conditionStr = " + result);
        return result;
    }

符合自己需求

猜你喜欢

转载自blog.csdn.net/zjy660358/article/details/126484959