Scala:将字符串优雅转换为布尔值

Dav*_*haw 72 scala

在Java中你可以写Boolean.valueOf(myString).但是在Scala中,java.lang.Boolean隐藏了scala.Boolean缺少此功能的东西.切换到使用原始Java版本的布尔值很容易,但这似乎不对.

那么Scala中用于true从字符串中提取的单行,规范解决方案是什么?

Dav*_*haw 125

啊,我很傻.答案是myString.toBoolean.

  • 如果myString为null,您的代码将抛出异常,我更喜欢下一个答案方法Try(myString.toBoolean).getOrElse(false) (7认同)
  • `Try(myString.toBoolean).getOrElse(false)`将完成抛出和捕获异常的工作.`Option(myString).exists(_.toBoolean)`避免额外的努力. (2认同)

use*_*601 92

这个怎么样:

import scala.util.Try

Try(myString.toBoolean).getOrElse(false)
Run Code Online (Sandbox Code Playgroud)

如果输入字符串未转换为有效的布尔值,false则返回而不是抛出异常.这种行为更类似于Java的行为Boolean.valueOf(myString).

  • 这绝对应该标记为正确的答案 (2认同)

Jes*_*per 10

注意:不要new Boolean(myString)用Java 编写- 总是使用Boolean.valueOf(myString).使用new变体不必要地创建一个Boolean对象; 使用valueOf变体不会这样做.


Kri*_*ala 9

问题myString.toBoolean是它会抛出一个异常,如果myString.toLowerCase不是一个"true""false"(甚至字符串中的额外空格将导致抛出异常).

如果你想要完全相同的行为java.lang.Boolean.valueOf,那么使用它完全限定,或者以不同的名称导入布尔值,例如,import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString).或写自己的方法来处理你自己的特殊情况(例如,您可能希望"t"成为true为好).


Xav*_*hot 5

Scala 2.13引入String::toBooleanOption,其组合,以Option::getOrElse提供一个安全的方式来提取Boolean作为String

"true".toBooleanOption.getOrElse(false)  // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false)  // false
Run Code Online (Sandbox Code Playgroud)