Scala:将字符串转换为布尔值的优雅
在Java中,您可以编写Boolean.valueOf(myString)
。但是在斯卡拉,java.lang.Boolean
被scala.Boolean
隐藏,它缺少这个功能。很容易切换到使用原始Java版本的布尔值,但这看起来不正确。Scala:将字符串转换为布尔值的优雅
那么在Scala中从字符串中提取true
的单行标准解决方案是什么?
啊,我很傻。答案是myString.toBoolean
。
如果myString为null,您的代码将抛出一个异常,我更喜欢下一个答案方法Try(myString.toBoolean).getOrElse(false) – 2016-06-26 12:49:43
注意:不要在Java中使用new Boolean(myString)
- 总是使用Boolean.valueOf(myString)
。使用new
变体会不必要地创建一个Boolean
对象;使用valueOf
变体不会这样做。
与myString.toBoolean
的问题是,它会抛出一个异常,如果myString.toLowerCase
是不完全的"true"
一个或"false"
(字符串中甚至额外的空白将导致引发异常)。
如果您想要与java.lang.Boolean.valueOf
完全相同的行为,请使用完全限定符或使用其他名称导入布尔值,例如import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
。或者编写自己的方法来处理你自己的特定情况(例如,你也可能想要"t"
也是true
)。
如何:而不是抛出一个异常
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
如果输入字符串不能转换为有效的布尔值false
返回。此行为更类似于Boolean.valueOf(myString)
的Java行为。
今天我一直在玩这个,将1/0值集合映射为布尔值。我不得不返回到星火1.4.1,和我终于得到它一起工作:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
其中,P(11)为数据帧场
我以前的版本不具备“尝试” ,这个工程,其他方式做它可用...
因为条件返回“true”或“false”,所以您不需要带'true else false'的'if'。您只需要尝试(条件).getOrElse(false)'。 – jwvh 2016-11-17 17:06:40
为什么不简单地使用正则表达式? – 2014-12-26 18:34:22