在if语句中计算String中的表达式

时间:2014-02-16 12:20:53

标签: java

假设一个字符串包含表达式1< 3 ...如何在if语句中评估该表达式?

import java.io.*;

public class EvaluateExpression
{
   public static void main(String[]args)throws IOException
   {
     InputStreamReader isr = new InputStreamReader(System.in);
     BufferedReader in = new BufferedReader(isr);

      String expression;

      System.out.print("Enter the expression to evaluate: ");
      expression = in.readLine();

      if (expression){
      System.out.print("The expression " + expression + " is true.");
      }else{
      System.out.print("The expression " + expression + " is not true.");
      }           
   }
}

需要布尔值但找到String。有没有办法评估字符串,所以它返回一个布尔值? if (1<3) {...}可以工作但if (expression) {...},其中String变量表达式为1 <3不起作用。将它转换为布尔值也不起作用。

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以使用JDK1.6

附带的ScriptEngine

例如:

 ScriptEngineManager sem = new ScriptEngineManager();
 ScriptEngine se = sem.getEngineByName("JavaScript");

 InputStreamReader isr = new InputStreamReader(System.in);
 BufferedReader in = new BufferedReader(isr);
 String expression;

  System.out.print("Enter the expression to evaluate: ");
  expression = in.readLine();
  String result = se.eval(expression).toString();
  if (result.equals("true")) {
      System.out.print("The expression " + expression + " is true.");
  } else {
       System.out.print("The expression " + expression + " is not true.");
  }

答案 1 :(得分:0)

您可以使用&gt;,&lt;,&gt; =,&lt; =,==,!=作为分隔符拆分字符串。从split函数检查返回数组中的2个字符串,并将它们转换为int。

然后在函数中使用类似的东西

if (youroperator.equals("<"))
    return first_number < second_number
elseif (youroperator.equals(">"))
    return first_number>second_number
...

您的运算符可以从string.contains()函数

获得

答案 2 :(得分:0)

如果您需要通用解决方案,可以使用JVM中内置的脚本引擎。

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
...
...
String expression = "1<3";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jsEngine = manager.getEngineByName("JavaScript"); //BE CAREFUL about the engine name. 
Object result = jsEngine.eval(expression); //Returns a java.lang.Boolean for the expression "1<3"

注意:虽然“JavaScript”引擎名称在我的环境中有效,但在您的环境中它可能不可用,或者可能被其他名称(如“js”或“javascript”)调用。在某些环境中,可能会使用其他引擎,如“Groovy”引擎。使用您环境中可用的任何引擎。

答案 3 :(得分:0)

尝试...

if(expression.equals("1<3"))
{}
else
{}

“if”将boolean作为参数,你不能在其中传递一个字符串。所以有等于方法 java.lang.String ,它检查两个字符串是否相等,其返回类型是布尔值(true或false)。