Ваш шаблон соответствует только строкам, которые выглядят точно как yyyy-mm-ddThh:mm
, в то время как шаблон, с которым вы тестируете, имеет миллисекунды и Z в конце.
Вы можете добавить .*
в конце вашего шаблона, чтобы покрыть строки, в конце которых есть дополнительные символы.
Кроме того, позвольте мне показать вам более идиоматический способ написания вашего кода:
// Create a type for the data instead of using a map.
case class Timestamp(year: Int, month: Int, day: Int, hour: Int, minutes: Int)
// Use triple quotes to avoid extra escaping.
// Don't capture parts that you will not use.
// Add .* at the end to account for milliseconds and timezone.
val reg = """(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}).*""".r
// Instead of empty strings, use Option to represent a value that can be missing.
// Convert to Int after parsing.
def dataExtraction(str: String): Option[Timestamp] = str match {
case reg(y, m, d, h, min) => Some(Timestamp(y.toInt, m.toInt, d.toInt, h.toInt, min.toInt))
case _ => None
}
// It works!
dataExtraction("2018-08-22T19:10:53.094Z") // => Some(Timestamp(2018,8,22,19,10))