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

时间:2019-05-31 17:31:04

标签: java string conditional-statements bluej

我是新来的!

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

CSV文件包含一些温度测量值,我需要为不同的温度测量值创建过滤器。我想知道是否有一种方法可以使if语句的条件成为字符串的值。

因为有多种方法可以过滤信息(>,<,> =,<=,从int x到int y),所以我想创建一个方法,该方法将一个字符串连接起来,该字符串创建用户正在寻找的条件;

  
      
  1. 提示用户从他要过滤的阵列中选择哪些数据。      
        

    (例如,选项3表示其数据存储在String [2]中)

      
  2.   
  3. 然后要求用户选择要如何过滤:>,<,> =,<=,从int x到int y。
  4.   
  5. 最后要求剩余值完成比较。

         

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

         
        

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

             

    例如a = String[2] + " > 20"

      
  6.   

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

控制台在哪里应读为:-------if(Double.valueOf(String[2]) > 20){}

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

时为什么使用String []

如果我的想法荒谬或不清楚,请多谢并致歉。

2 个答案:

答案 0 :(得分:1)

您不是在“比较双精度值”,实际上您根本没有进行任何比较。字符串是字符串,不是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,这是我之前从未见过的,但可能很有用。

答案 1 :(得分:0)

如果要评估字符串中的条件,则可以使用类似以下的内容:

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();
        }
    }