【发布时间】:2018-07-12 20:46:35
【问题描述】:
有没有简单的方法通过避免异常的索引限制来安全地拆分?
例如:
"1-2".split("-")(1) == "2"
"1".split("-")(1) == null
【问题讨论】:
标签: scala
有没有简单的方法通过避免异常的索引限制来安全地拆分?
例如:
"1-2".split("-")(1) == "2"
"1".split("-")(1) == null
【问题讨论】:
标签: scala
此功能已在 Array 中实现。 lift 方法为越界索引返回 None,否则返回 Some(value)
val array = Array(3, 5, 1)
array.lift(5) // None
array.lift(0) // Some(3)
【讨论】:
您可以使用scala.util.Try 包装您的操作,然后对其执行getOrElse。如果该索引处的值存在,它将返回该值,否则它将返回getOrElse 中指定的值。为上述给定场景尝试以下代码。
scala.util.Try("1".split("-")(1)).getOrElse(null)
//output
null
【讨论】:
Scala Array 不提供按索引获取元素的安全方法。所以你应该考虑IndexOutOfBoundsException。可能的方式:
使用Try 并测试是否成功:
scala.util.Try(array(index))
添加自己的方法:
implicit class RichArray[A](array: Array[A]) {
def opt(index: Int): Option[A] =
if (array.length < 0 || array.length <= index) None
else Some(array(index))
}
val array = Array(12, 3, 4)
array.opt(2) // Some(4)
array.opt(3) // None
【讨论】: