【问题标题】:Split without Index out of bound exception没有索引越界异常的拆分
【发布时间】:2018-07-12 20:46:35
【问题描述】:

有没有简单的方法通过避免异常的索引限制来安全地拆分?

例如:

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

【问题讨论】:

    标签: scala


    【解决方案1】:

    此功能已在 Array 中实现。 lift 方法为越界索引返回 None,否则返回 Some(value)

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

    【讨论】:

    • 太棒了!没见过这种方法
    【解决方案2】:

    您可以使用scala.util.Try 包装您的操作,然后对其执行getOrElse。如果该索引处的值存在,它将返回该值,否则它将返回getOrElse 中指定的值。为上述给定场景尝试以下代码。

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

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-19
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 2012-01-31
        • 2015-12-08
        相关资源
        最近更新 更多