我有以下輸入字串: val s = 19860803 000000
我想把它轉換成 1986/08/03 我試過了s.split(" ").head,但這不完整
是否有使用正則運算式的優雅 Scala 編碼方式來獲得預期結果?
uj5u.com熱心網友回復:
您可以使用使用 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
uj5u.com熱心網友回復:
我還沒有測驗過這個,但我認為以下方法會起作用
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
uj5u.com熱心網友回復:
使用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("/")
uj5u.com熱心網友回復:
經常被忽視的人patch()可以做到這一點。不需要正則運算式。
val s = "19860803 000000"
val rslt = s.take(8).patch(6,"/",0).patch(4,"/",0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/383639.html
上一篇:如何匹配或不匹配多個前綴?
