Javaでevalする! けどないんでJRubyでやるのです

文字列としてわたってくる計算式をJavaで計算してください!!
1 + 2
これは簡単、すぐできそうだね
1 + 2 - 3
ま〜多少増えてもいけそうだね
1 + 2 - 3 * 4
お?これは、、ううむ、、、めんどいぞ!!
((1 + 2) - 3 ) * 4
こ、このへんは、、ちときつい。。。

と、いうわけで、Javaで数式文字列を逆ポーランドに変換して、それからスタックにつめてほにゃらら〜。なんてことをやろうかとしてたんだけど、すごくめんどいんでevalできないかと探してみてもどうやらナッシング〜

JavaSE6からjavax.script(今んとこRhinoベースだけ)が使えるみたいなんだけど、今回使ってるJavaは1.5なので断念。しょうがないのでJRubyを使うことにしました。

まずはJRubyダウンロード (今回は、ver1.1.3 を選択)

んで、jruby.jarにクラスパスを通す。

とりあえず目的のeval

import org.jruby.Ruby;

public class EvalTest {
  
  public static void main(String[] args) {
    Ruby ruby = Ruby.newInstance();
    System.out.println(ruby.evalScriptlet("(1 + 2) * 3"));
  }
}

おお〜!超簡単だよ!!

ちなみにjavax.scriptで書くとこんなん

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

public class EvalTest {
  
  public static void main(String[] args) {
    try {
      ScriptEngineManager manager = new ScriptEngineManager();
      ScriptEngine engine = manager.getEngineByName("JavaScript");
      engine.eval("println((1 + 2) * 3)");
    } catch (ScriptException e) {
      e.printStackTrace();
    }
  }
}

こっちも超簡単!!

関連書籍

JRuby 徹底入門
JRuby 徹底入門
posted with amazlet at 08.08.22
株式会社イーシー・ワン
ソーテック社
売り上げランキング: 54959