以优雅的方式转换字符串 Scala

transform string scala in an elegant way

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

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

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

我还没有测试过这个,但我认为下面的方法会起作用

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

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

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

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

输出

result: String = 1986/08/03

另一种方法,没有正则表达式,使用 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("/")