2

I have little confused with check the logical value true or false here. Sorry, I am just growing in java.

IF

if(28 >= 25 && 28 <= 30){
    System.out.println("OK");
}

result print OK in output. but i have actual value is like this:

String value="28 >= 25 && 28 <= 30";

if i do same thing above like this

if(value){
System.out.println("OK OK");
}

value doesnot recognize . How do i check above value string . Do you have any idea please sharing with me? i am very new .

Edit: I followed by @suren's answers. Actually getting not error in java with using android getting java.lang.NoClassDefFoundError: javax.script.ScriptEngineManager.

Used Java version: 1.6.0

java:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TEST {
public static void main(String[] args) {
        String log="28 >= 25 && 28 <= 30";
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        try {
          Boolean result = (Boolean) engine.eval(log);
          if (result) {
            System.out.println("OK OK");
          }
        } catch (ScriptException e) {
          e.printStackTrace();
        }
}}

In ANdroid:

 import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;
    public class TEST {
public static boolean checkValid(String pstring) {

     ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        try {
          Boolean result = (Boolean) engine.eval(pstring);
          if (result) {
            System.out.println("OK OK");
            return true;
          }else {
              return false;
          }
        } catch (ScriptException e) {
          e.printStackTrace();
        }
     return false;
}
}

and call in Main:

public class EditBox extends LinearLayout implements View.OnTouchListener {
String v="28 >= 25 && 28 <= 30";
  Log.i("Type", "=="+TEST.checkValid(v));
}

Getting error, java.lang.NoClassDefFoundError: javax.script.ScriptEngineManager

I am also trying to using javacomplier:

String value="28 >= 25 && 28 <= 30";
 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
     int compilationResult = compiler.run(null, null, null,value);
     if(compilationResult == 0){
    System.out.println("Compilation is successful");
    }else{
 System.out.println("Compilation Failed");
       }

but here i got: Exception in thread "main" java.lang.NullPointerException

Final Edit(Working):

 Interpreter interpreter = new Interpreter();
    try{
        Object obj = interpreter.eval(inputstring);
        if (obj.toString().equalsIgnoreCase("true")){

            return true;
        }else{

            return false;
        }
    }catch (EvalError e1){
        e1.printStackTrace();
    }
java new user
  • 107
  • 1
  • 8

1 Answers1

4

One of the simple possible solution using ScriptEngine class and evaluating the string expresssion as a javascript string

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
try {
  Boolean result = (Boolean) engine.eval("28 >= 25 && 28 <= 30");
  if (result) {
    System.out.println("OK OK");
  }
} catch (ScriptException e) {
  e.printStackTrace();
}

You can also consider other java based expression language libraries Link

Suren Raju
  • 3,012
  • 6
  • 26
  • 48