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

问题描述:

在Java中,您可以编写Boolean.valueOf(myString)。但是在斯卡拉,java.lang.Booleanscala.Boolean隐藏,它缺少这个功能。很容易切换到使用原始Java版本的布尔值,但这看起来不正确。Scala:将字符串转换为布尔值的优雅

那么在Scala中从字符串中提取true的单行标准解决方案是什么?

+0

为什么不简单地使用正则表达式? – 2014-12-26 18:34:22

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

+2

如果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

这应该肯定标记为正确的答案 – Giorgio 2016-03-04 16:05:24

+0

我认为一个例外是你想要的。如果用户输入“1”而不是“真”或其他什么?这种方法将不会检测到这样的错误。但是现在我知道了Try函数,这很好。 – user42723 2017-03-24 18:11:17

今天我一直在玩这个,将1/0值集合映射为布尔值。我不得不返回到星火1.4.1,和我终于得到它一起工作:

Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false)) 

其中,P(11)为数据帧场

我以前的版本不具备“尝试” ,这个工程,其他方式做它可用...

+1

因为条件返回“true”或“false”,所以您不需要带'true else false'的'if'。您只需要尝试(条件).getOrElse(false)'。 – jwvh 2016-11-17 17:06:40