看小夥如何用java一行核心代碼實現四則混合運算(帶括號)計算器

哈哈,好了不開玩笑了,今天的主角就是java8的新特性Nashorn JavaScript(完全支持ECMAScript 5.1規範以及一些擴展),簡單來說,就是可用通過它實現,java和javascript代碼的互相調用。當然,其實這個特性java8以前就有(Rhino),只不過java8這個新的對以前進行了優化。

至於怎麼用呢?讓我們看下面這個例子。
我們都知道,javascript裏面有個函數eval(String),可以對傳入的合法字符串參數進行計算。下面讓我們通過java調用javascript的eval函數進行計算表達式:

package Test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Cal {
    public  static Object calculate(String s){
        Object object =  null;
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");

        try {
            object = nashorn.eval(s);
        } catch (ScriptException e) {
            object = "請輸入正確表達式!!! please input the correct formula!!!";
        }
        return object;
    }
    public static void main(String[] args) {
            System.out.println(calculate("(347+34.5)/(75-72)+34**3").toString());
    }
}

當然這種寫法,在自己本地還可以運行,如果你想用這個方法過oj?額,反正我是沒成功過。。。

當然除此之外,你還可以jjs命令行工具,用js代碼進行交互(先要安裝好並配置好java8環境)。

jjs

jjs是個基於Nashorn引擎的命令行工具。它接受一些JavaScript源代碼爲參數,並且執行這些源代碼。

例如,我們創建一個具有如下內容的sample.js文件:

print('Hello World!');

打開控制檯,輸入以下命令:

$ jjs sample.js

以上程序輸出結果爲:

Hello World!

jjs 交互式編程

打開控制檯,輸入以下命令:

$ 
jjs  //進入控制檯輸入jjs指令
jjs> print("Hello, World!")
Hello, World!
jjs> quit()

傳遞參數

打開控制檯,輸入以下命令:

$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs> 

JavaScript 中調用 Java

var BigDecimal = Java.type('java.math.BigDecimal');

function calculate(amount, percentage) {

   var result = new BigDecimal(amount).multiply(
   new BigDecimal(percentage)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
   
   return result.toPlainString();
}

var result = calculate(568000000000000000023,13.9);
print(result);

我們使用 jjs 命令執行以上腳本,輸出結果如下:

$ jjs sample.js
78952000000000002017.94

但java11中此特性好像又會被移除。。。


歡迎關注公衆號BatFor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章