拆分没有索引超出限制的异常

时间:2018-02-02 10:56:34

标签: scala

是否有任何简单的方法可以通过避免异常的索引绑定来安全地进行拆分?

例如:

"1-2".split("-")(1)= 2
"1".split("-")(1) = null

3 个答案:

答案 0 :(得分:9)

此功能已在Array中实施。如果索引超出范围,lift方法返回None,否则返回Some(value)

val array = Array(3, 5, 1)
array.lift(5) // None
array.lift(0) // Some(3)

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以使用scala.util.Try包裹您的操作,然后对其getOrElse进行操作。如果该索引处的值存在,它将返回该值,否则它将返回getOrElse中指定的值。请尝试以下给定方案的代码。

scala.util.Try("1".split("-")(1)).getOrElse(null)
//output
null