在 java 中使用字符串作为条件(将字符串转换为布尔值)
Use a String as a conditional in java (Convert String to boolean)
我是新来的!
我正在做一个学校项目,我将一个 .csv 文件作为输入并读取每一行值并将它们存储到一个 String[] 中,然后创建一个 ArrayList。
CSV 文件有一些温度测量值,我需要为不同的温度测量值制作过滤器。我想知道是否有办法使 if 语句的条件成为字符串的值。
由于有不同的方法来过滤信息(>、<、>=、<=,从 int x 到 int y)我想创建一个方法来连接一个字符串,该字符串创建用户正在查找的条件为了;
- 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])
- 然后要求用户选择他想要的过滤方式:>、<、>=、<=,从 int x 到 int y。
最后求余值完成比较。
根据这些提示我们可以构建:
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();
}
}
我是新来的!
我正在做一个学校项目,我将一个 .csv 文件作为输入并读取每一行值并将它们存储到一个 String[] 中,然后创建一个 ArrayList。
CSV 文件有一些温度测量值,我需要为不同的温度测量值制作过滤器。我想知道是否有办法使 if 语句的条件成为字符串的值。
由于有不同的方法来过滤信息(>、<、>=、<=,从 int x 到 int y)我想创建一个方法来连接一个字符串,该字符串创建用户正在查找的条件为了;
- 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])
- 然后要求用户选择他想要的过滤方式:>、<、>=、<=,从 int x 到 int y。
最后求余值完成比较。
根据这些提示我们可以构建:
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();
}
}