import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.util.regex.Matcher;
public class Cal {
public static Object jsObjFunc(String jsStr,String function,Object... args) {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine scriptEngine = sem.getEngineByName("js");
try {
scriptEngine.eval(jsStr);
Invocable inv2 = (Invocable) scriptEngine;
return inv2.invokeFunction(function,args);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String... args) {
String reg = "(\\$\\{.+?\\})";
Pattern p=Pattern.compile(reg);
String calTest = "${old}>${newold}?3>2?'123':'456':'${<55}'";
Matcher m=p.matcher(calTest);
Map map = new HashMap<>();
map.put("old","56");
map.put("newold","56");
while(m.find()) {
String temp = m.group();
String sq = temp.substring(2);
String ov = sq.substring(0, sq.length() - 1);
System.out.println("裁切完:"+ov);
if(map.containsKey(ov)) {
System.out.println("准备替换"+map.get(ov).toString());
calTest = calTest.replace(temp,map.get(ov).toString());
}
}
System.out.println("计算表达式:"+calTest);
String jsStr ="function myFuc(param){return eval(param) }";
System.out.println(jsObjFunc(jsStr,"myFuc",calTest));
}
}