java自带解析字符串为JavaScript,可用于字符串形式的公式计算,示例如下:
public class Test {
static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
public static void main(String[] args) {
String strs = "if(S >= 12 && S < 14) {(14 - S)*1000} else if(S >= 10 && S < 12){(12 - S)*3000 + 2000}";
double result = 0;
try {
result = (double) jse.eval(strs.replace("S", "11"));
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.out.println(result);
} catch (Exception t) {
}
}
把S=11带入公式,输出结果为:5000.0
===20250723更新===
Java 15 及以后版本,移除了 nashorn,导致没有 engine
所以在jdk17下直接运行上面代码会报错,需要把nashorn-core、asm、asm-util引入进来才能正常:
maven引入:
<!-- https://mvnrepository.com/artifact/org.openjdk.nashorn/nashorn-core -->
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm-util -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>9.8</version>
</dependency>