在Java中运行时评估代码

时间:2012-01-04 20:50:42

标签: java string if-statement

  

可能重复:
  Is there a java equivalent of the python eval function?

有一个字符串,类似于String str = "if a[0]=1 & a[1]=2"。如何在真正的IF THEN表达式中使用此字符串? E.g:

for (Integer[] a : myNumbers) {
   if a[0]=1 & a[1]=2 {  // Here I'd like to use the expression from str
      //...
   }
}

2 个答案:

答案 0 :(得分:4)

Java不是支持动态评估的脚本语言(尽管它支持脚本执行)。我会挑战你,检查一下你正在尝试做的是在Java中以正确的方式完成。

有两种常见的方法可以解决这个问题,如下所示。但是,当涉及到应用程序的运行时,它们会对性能产生重大影响。


脚本执行

您可以启动ScriptEngine,构建ScriptContext,以Javascript或其他语言执行片段,然后阅读评估结果。


<强>解析

您可以构建一个词法分析器,分析字符串并将其转换为您要执行的操作。在Java中,我建议你看一下JFlex。

答案 1 :(得分:0)

我认为你不能做你所要求的。

此外,你的java似乎没有多大意义。这样的事情会更有意义:

for (Integer a : myNumbers) {
   if (a.equals(Integer.valueOf(1))){
      //...
   }
}

但你可以说:

if("hello".equals("world")){
    //...
}

你可以建立一个字符串:

String str = "if "+a[0]+"=1 & "+a[1]+"=2"

你可以把它放在一起然后说:

String str = "if "+a[0]+"=1 & "+a[1]+"=2"
if(str.equals("if 1=1 & 2=2")){
    //...
}

但我认为你可能只是想以错误的方式做某事