输入一个表达式(用字符串表示),求这个表达式的值。

在刷算法题的时候,碰到一道题,记录一下,题目是这样的:

输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。

输入描述:
输入一个算术表达式

输出描述:
得到计算结果

输入:
3+2*{1+2*[-4/(8-6)+7]}

输出:
25

看了一下解法,如下:

		Scanner scan = new  Scanner(System.in);
        String input = s;
        input = input.replace("[","(");
        input = input.replace("{","(");
        input = input.replace("}",")");
        input = input.replace("]",")");
        ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
        try {
            System.out.println(scriptEngine.eval(input));
        } catch (ScriptException e) {
            throw new RuntimeException(e);
        }

额,超出了我的想象,这个ScriptEngine这么神奇。了解了一下。

一般的用途主要是能解析通用的表达式就好,比如X >= 1(X作为参数传入)这样的表达式,也能利用js的函数语法,创造一个就像java的函数一样存在于内存中随时可以被调用的函数,更可以将js中的对象直接转换成java对象。

参考链接:Java用ScriptEngine解析脚本

你可能感兴趣的:(Java,算法,java,算法)