在Java中,您可以编写Boolean.valueOf(myString)
。但是在Scala中,java.lang.Boolean
隐藏了scala.Boolean
,而true
缺少此功能。切换到使用原始Java版本的布尔值很容易,但这似乎不对。
那么Scala中用于从字符串中提取{{1}}的单行,规范解决方案是什么?
答案 0 :(得分:117)
myString.toBoolean
。
答案 1 :(得分:87)
这个怎么样:
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
如果输入字符串未转换为有效的布尔值,则返回false
而不是抛出异常。此行为更类似于Boolean.valueOf(myString)
的Java行为。
答案 2 :(得分:10)
注意:不要在Java中编写new Boolean(myString)
- 始终使用Boolean.valueOf(myString)
。使用new
变体不必要地创建Boolean
对象;使用valueOf
变体不会这样做。
答案 3 :(得分:9)
myString.toBoolean
的问题是,如果myString.toLowerCase
不是"true"
或"false"
中的一个,则会引发异常(即使字符串中有额外的空格也是如此)导致抛出异常)。
如果您想要与java.lang.Boolean.valueOf
完全相同的行为,请使用完全限定,或使用其他名称导入布尔值,例如import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
。或者编写自己的方法来处理自己的特定情况(例如,您可能希望"t"
也是true
。
答案 4 :(得分:1)
今天我一直很开心,将1/0的值映射到布尔值。我不得不回到Spark 1.4.1,我终于得到了它:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
其中p(11)是数据帧字段
我之前的版本没有“尝试”,这是有效的,其他方式可用...
答案 5 :(得分:0)
Scala 2.13
引入了String::toBooleanOption
,并结合到Option::getOrElse
,为提取Boolean
作为String
提供了一种安全的方法:
"true".toBooleanOption.getOrElse(false) // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false) // false