java通过ScriptEngine类识别字符串形式的javaScript,可进行字符串公式计算

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容