Использовать строку в качестве условия в Java (Преобразовать строку в логическое значение) - PullRequest
0 голосов
/ 31 мая 2019

Я новичок здесь!

Я делаю школьный проект, где я беру файл .csv в качестве входных данных, читаю каждую строку значений и сохраняю их в String [], а затем создаю ArrayList.

В файле CSV есть некоторые измерения температуры, и мне нужно сделать фильтры для различных измерений температуры.Что я хочу знать, если есть способ сделать условие оператора if значением строки.

Поскольку существуют разные способы фильтрации информации (>, <,> =, <=, от int x до int y), я хочу создать метод, который объединяет строку, которая создает условие, для которого пользователь являетсянаходясь в поиске;</p>

  1. Предлагает пользователю выбрать, какие данные из массива он хочет фильтровать.

    (Например, вариант 3, что означает, что данные хранятся в строке [2])

  2. Затем просит пользователя выбрать способ фильтрации:>,<,> =, <=, от int x до int y.</li>
  3. Наконец, просит оставшееся значение завершить сравнение.

    Из этих подсказок мы можем построить:

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

    Например a = String[2] + " > 20"

Тогда я хочу использовать «а», например: if(a){}

Где консоль должна читать это как: - - - - - - - if(Double.valueOf(String[2]) > 20){}

MyIDE - это BlueJ, который сообщает мне о несовместимых типах: java.lang.String не может быть преобразовано в логическое значение.Вы можете удивиться, почему я использую строку [], если сравниваю двойные значения,

Заранее благодарю и приношу свои извинения, если моя идея нелепа или неясна.

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Вы не «сравниваете двойные значения», и на самом деле вы вообще ничего не сравниваете.Строка - это строка, а не значение 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 ...
}

Редактировать: Я немного искал и нашел это , которое я раньше не видел, но может быть полезным.

0 голосов
/ 31 мая 2019

Если вы хотите оценить условия из строк, вы можете использовать что-то вроде этого:

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