我是新来的!
我正在做一个学校项目,我将.csv文件作为输入并读取每一行值并将它们存储到String []中,然后创建一个ArrayList。
CSV文件包含一些温度测量值,我需要为不同的温度测量值创建过滤器。我想知道是否有一种方法可以使if语句的条件成为字符串的值。
因为有多种方法可以过滤信息(>,<,> =,<=,从int x到int y),所以我想创建一个方法,该方法将一个字符串连接起来,该字符串创建用户正在寻找的条件;
- 提示用户从他要过滤的阵列中选择哪些数据。
(例如,选项3表示其数据存储在String [2]中)
- 然后要求用户选择要如何过滤:>,<,> =,<=,从int x到int y。
最后要求剩余值完成比较。
根据这些提示,我们可以构建:
String a = String[2] + (comparison operator) + comparison value.
例如
a = String[2] + " > 20"
然后我要这样使用'a':if(a){}
控制台在哪里应读为:-------if(Double.valueOf(String[2]) > 20){}
我的IDE是BlueJ,它告诉我不兼容的类型:java.lang.String无法转换为布尔值。 您可能想知道为什么在比较双精度值
时为什么使用String []如果我的想法荒谬或不清楚,请多谢并致歉。
答案 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();
}
}