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;
}
符合自己需求