繁体   English   中英

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

[英]transform string scala in an elegant way

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

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

有没有优雅的 scala 正则表达式编码方式来获得预期的结果?

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

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

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

Output

result: String = 1986/08/03

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

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文档有很多好信息

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

经常被忽视的patch()可以做到这一点。 不需要正则表达式。

val s = "19860803 000000"
val rslt = s.take(8).patch(6,"/",0).patch(4,"/",0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM