是否有任何简单的方法可以通过避免异常的索引绑定来安全地进行拆分?
例如:
"1-2".split("-")(1)= 2
"1".split("-")(1) = null
答案 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