【问题标题】:transform string scala in an elegant way以优雅的方式转换字符串 scala
【发布时间】:2022-01-19 13:44:54
【问题描述】:

我有以下输入字符串:val s = 19860803 000000

我想把它转换成 1986/08/03 我试过这个s.split(" ").head,但这还不完整

是否有任何优雅的 scala 编码方式与正则表达式来获得预期的结果?

【问题讨论】:

    标签: regex string scala split


    【解决方案1】:

    我没有对此进行测试,但我认为以下内容会起作用

    val expr = raw"(\d{4})(\d{2})(\d{2}) (.*)".r
    
    val formatted = "19860803 000000" match {
      case expr(year,month,day,_) =>. s"$year/$month/$day"
    }
    

    scala 文档有很多很好的信息 https://www.scala-lang.org/api/2.13.6/scala/util/matching/Regex.html

    【讨论】:

      【解决方案2】:

      您可以使用 3 个捕获组来使用类似日期的模式,并匹配以下空格和 6 位数字。

      在替换中使用正斜杠替换中的 3 组。

      val s = "19860803 000000"
      val result = s.replaceAll("^(\\d{4})(\\d{2})(\\d{2})\\h\\d{6}$", "$1/$2/$3")
      

      输出

      result: String = 1986/08/03
      

      【讨论】:

        【解决方案3】:

        使用slicetake 的替代方法,不使用正则表达式。

        val s = "19860803 000000"
        val year = s.take(4)
        val month = s.slice(4,6)
        val day = s.slice(6,8)
        val result = s"$year/$month/$day"
        

        或者作为一个班轮

        val result = Seq(s.take(4), s.slice(4,6), s.slice(6,8)).mkString("/")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多