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(); } } }
こっちも超簡単!!