以优雅的方式转换字符串 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
另一种方法,没有正则表达式,使用 slice
和 take
。
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("/")
我有以下输入字符串: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
另一种方法,没有正则表达式,使用 slice
和 take
。
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("/")