【问题标题】:Convert String to boolean only if input is "true" or "false"仅当输入为“true”或“false”时才将字符串转换为布尔值
【发布时间】:2020-06-02 06:40:30
【问题描述】:

如何确定字符串的输入是“真”还是“假”,然后将其解析为布尔值?

例如:

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

【问题讨论】:

标签: java string type-conversion boolean


【解决方案1】:

更现代一点(需要--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的检查

【讨论】:

  • 类似于发布为 code 的文本(问题结束)
【解决方案2】:

试试这样的:

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");
}

希望对你有帮助

【讨论】:

  • 谢谢! toLowerCase() 不是必需的,对吧?
  • 你要么这样用,要么用:equalsIgnoreCase()
  • 最多 3 次 toLowerCase [: -| // 和<constant>.equals(... (只是我的感觉) [: -(
  • @user85421 你可以重构
【解决方案3】:

来自 java doc 关于方法 Boolean.valueOf(String):

返回一个布尔值,其值由指定字符串表示。 如果字符串参数是,则返回的布尔值表示一个真值 不为 null 且等于字符串“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";
}

【讨论】:

  • 你明白你也会为有效输入抛出异常,对吧?
  • @Stultuske,我的问题可能很愚蠢,如果你有时间,你能给我一个有效输入引发异常的例子吗?目前我想不通。
  • 您走在正确的轨道上,但您声明的评论自己说: Boolean.valueOf 忽略案例,您在调用 Boolean.valueOf 之前执行的测试不会,所以在您的示例中: getBoolean for value "True" 将抛出异常,而它应该返回 true。
  • @Stultuske,然后我误解了这个问题,因为我认为“True”不是有效输入,但唯一有效的输入是字符串“true”和“false”。如果是这种情况,我会删除我的答案。
  • @Stultuske 感谢您的帮助和时间,我会听从您的建议,不会删除我的答案。
【解决方案4】:

如果您想绝对确定输入是“true”/“TRUE”或“false”/“FALSE”,则必须执行 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()

您也可以在 Apache Commons Lang 中使用 BooleanUtils https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/BooleanUtils.html

 Boolean bool = BooleanUtils.toBooleanObject(input)

如果它既不是“真”也不是“假”(除了“t”、“y”、“yes”等 - 参见 JavaDoc),则返回 null

【讨论】:

  • 如果您将字符串的顺序与"true".equalsIgnoreCase(input) 进行比较,则不需要那些空检查。
  • equalsIgnoreCase() 不区分大小写,对吧?所以“TRUE”也可以。
  • 是的,但我认为“true”和“TRUE”希望被同等对待。将编辑以明确
【解决方案5】:

你可以使用:

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

【讨论】:

  • 但是Boolean.parseBoolean("foobar"); 不会抛出异常。
猜你喜欢
  • 2011-04-27
  • 2011-12-28
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2020-03-08
  • 2017-01-08
  • 2016-04-05
  • 2015-09-18
相关资源
最近更新 更多