为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2022-12-28 15:51:31
我刚来这地方!我正在做一个学校项目,我将一个 .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[],提前致谢,如果我的想法荒谬或不清楚,我深表歉意。
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您不是在“比较双重值”,实际上您根本没有在比较任何东西。字符串是字符串,而不是真/假值,因此不兼容类型错误。(澄清一下,Java 看到的是一个字符串:if("Double.valueOf(String[2]) > 20"){}not 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 ...

}

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


查看完整回答
反对 回复 2022-12-28
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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


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

        }

    }


查看完整回答
反对 回复 2022-12-28
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信