Преобразовать строку в логическое значение, только если для ввода задано значение «истина» или «ложь» - PullRequest
0 голосов
/ 18 февраля 2020

Как я могу убедиться, что ввод строки является либо "true", либо "false", а затем проанализировать его как логическое значение?

Например:

String input = "true"; -> boolean result = true;
String input = "false"; -> boolean result = false;
String input = "foobar"; -> throw new InvalidInputException("true or false is allowed");

Ответы [ 5 ]

5 голосов
/ 18 февраля 2020

Вам нужно будет сделать if else операторы, если вы хотите быть абсолютно уверенными, что ввод является либо «истинным» / «ИСТИННЫМ», либо «ложным» / «ЛОЖНЫМ»:

if ("true".equalsIgnoreCase(input) {
    return true;
} else if ("false".equalsIgnoreCase(input)) {
    return false;
} else {
    throw new InvalidInputException("true or false is allowed")
}

Если вы хотите буквально только регистрозависимое значение «true» или «false», измените .equalsIgnoreCase() на .equals()

В качестве альтернативы вы можете использовать BooleanUtils в Apache Commons Lang https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/BooleanUtils.html

 Boolean bool = BooleanUtils.toBooleanObject(input)

Если это не «истина» или «ложь» (среди прочего, например, «t», «y», «да» и др. 1019 * - см. JavaDo c), тогда null возвращается

1 голос
/ 18 февраля 2020

Немного более современно (требуется --enable-preview опция для компиляции / запуска):

var result = switch (input) {
    case "true"  -> true;
    case "false" -> false;
    default      -> throw new InvalidInputException ("true or false is allowed");
};

для преобразования без учета регистра:

var result = switch (input.toLowerCase()) {
    case "true"  -> true;
    case "false" -> false;
    default      -> throw new InvalidInputException ("true or false is allowed");
};

Примечание: в конечном итоге отсутствует чек на null

1 голос
/ 18 февраля 2020

С java до c о методе Boolean.valueOf (String) :

Возвращает логическое значение, представленное указанной строкой. Возвращаемое логическое значение представляет собой истинное значение, если строковый аргумент не равен нулю и равен (без учета регистра) строке "true".

Таким образом, вы можете использовать его следующим образом:

public static String getBoolean(String s) {
    if (!s.equals("true") && !s.equals("false")) {
            throw new InvalidInputException("true or false is allowed");
    }
    return Boolean.valueOf(s) ? "true": "false";
}
1 голос
/ 18 февраля 2020

Попробуйте что-нибудь вроде этого:

String s = input.toLowerCase();
Boolean b ;
if ("true".equals(s) || "false".equals(s)) {
   b= Boolean.parseBoolean(s);
}
else  {
    throw new InvalidInputException("true or false is allowed");
}

Надеюсь, это поможет

0 голосов
/ 18 февраля 2020

Вы можете использовать:

if(input.toLowerCase().equals("true") || input.toLowerCase().equals("false")) {
    return Boolean.parseBoolean(input);
} else {
    throw new InvalidInputException("true or false is allowed");
}
...