在 java 中使用字符串作为条件(将字符串转换为布尔值)

Use a String as a conditional in java (Convert String to boolean)

我是新来的!

我正在做一个学校项目,我将一个 .csv 文件作为输入并读取每一行值并将它们存储到一个 String[] 中,然后创建一个 ArrayList。

CSV 文件有一些温度测量值,我需要为不同的温度测量值制作过滤器。我想知道是否有办法使 if 语句的条件成为字符串的值。

由于有不同的方法来过滤信息(>、<、>=、<=,从 int x 到 int y)我想创建一个方法来连接一个字符串,该字符串创建用户正在查找的条件为了;

  1. Prompts user to choose what data from the array he wants to filter by.

    (For instance option 3, which means its the data stored in String[2])

  2. 然后要求用户选择他想要的过滤方式:>、<、>=、<=,从 int x 到 int y。
  3. 最后求余值完成比较。

    根据这些提示我们可以构建:

    String a = String[2] + (comparison operator) + comparison value.

    For example a = String[2] + " > 20"

然后我想像这样使用 'a':if(a){}

控制台应将其读作:- - - - - - - if(Double.valueOf(String[2]) > 20){}

我的 IDE 是 BlueJ,它告诉我不兼容的类型:java.lang.String 无法转换为布尔值。 您可能想知道为什么我要比较双精度值时使用 String[],

在此先致谢,如果我的想法荒谬或不清楚,我深表歉意。

你不是"comparing double values",事实上你根本没有在比较任何东西。字符串是字符串,而不是 true/false 值,因此不兼容类型错误。 (澄清一下,Java 看到的是一个字符串:if("Double.valueOf(String[2]) > 20"){} 而不是 if(Double.valueOf(String[2]) > 20){}

我可能只在比较运算符上使用一个开关(确保它是一个字符串而不是一个字符):

switch(operator) {
    case ">":
        doStuffGreaterThan();
        break;  // Needed or else it will continue into the next cases too
    case "<":
        doStuffLessThan();
        break;
    case ">=":
        doStuffGE();
        break;
    ... etc ...
}

编辑:我进行了一些搜索并找到了 this,我以前没见过但可能有用。

如果你想从字符串中评估条件,你可以使用这样的东西:

public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
        try {
            Boolean eval = (Boolean) engine.eval("40 > 10");
            assert(eval);
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }