【发布时间】:2022-01-19 13:44:54
【问题描述】:
我有以下输入字符串:val s = 19860803 000000
我想把它转换成 1986/08/03
我试过这个s.split(" ").head,但这还不完整
是否有任何优雅的 scala 编码方式与正则表达式来获得预期的结果?
【问题讨论】:
我有以下输入字符串: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 个捕获组来使用类似日期的模式,并匹配以下空格和 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
【讨论】:
使用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("/")
【讨论】: