将正则表达式匹配转换为String



我在Scala中创建了一个简单的代码,用于检查输入是否被正确格式化为HH:mm。我期望代码产生一个有效字符串的数组。然而,我得到的结果是类型Any = Array(),这是有问题的,因为当我试图打印该结果时,我得到了这样的东西:[Ljava.lang.Object;@32a59591.

我想这是一个简单的问题,但作为一个Scala新手,我没有设法解决它,即使经过几个小时的谷歌和试用&错误。

val scheduleHours = if (inputScheduleHours == "") {
dbutils.notebook.exit(s"ERROR: Missing param value for schedule hours.")
}
else {
val timePattern = """^((?:[0-30]?[0-9]|2[0-3]):[0-5][0-9])$""".r
val inputScheduleHoursParsed = inputScheduleHours.split(";").map(_.trim)

for (e <- inputScheduleHoursParsed) yield e match {
case timePattern(e) => e.toString
case _ => dbutils.notebook.exit(s"ERROR: Wrong param value for schedule hours: '${inputScheduleHours}'")
}
}

问题是一些分支返回您想要的结果,而其他分支返回dbutils.notebook.exit(我认为)返回Unit。Scala必须为结果选择一种同时兼容UnitArray[String]的类型,Any是唯一适合的类型。

一个解决方案是在调用dbutils.notebook.exit之后添加一个兼容的值,例如

val scheduleHours = if (inputScheduleHours == "") {
dbutils.notebook.exit(s"ERROR: Missing param value for schedule hours.")
Array.empty[String]
}

然后所有的分支返回Array[String],这将是结果的类型。

最新更新