模式匹配以检查字符串是否为 null 或空
Pattern Matching to check if string is null or empty
是否可以使用 match 检查字符串是否为空?
我正在尝试做类似的事情:
def sendToYahoo(message:Email) ={
val clientConfiguration = new ClientService().getClientConfiguration()
val messageId : Seq[Char] = message.identifier
messageId match {
case messageId.isEmpty => validate()
case !messageId.isEmpty => //blabla
}
}
但是我有一个编译错误。
提前致谢。
def isNullOrEmpty[T](s: Seq[T]) = s match {
case null => true
case Seq() => true
case _ => false
}
您可以编写一个简单的函数,例如:
def isEmpty(x: String) = Option(x).forall(_.isEmpty)
或
def isEmpty(x: String) = x == null || x.isEmpty
如果您认为 " "
也为空,您可能还想 trim 字符串。
def isEmpty(x: String) = x == null || x.trim.isEmpty
然后使用它
val messageId = message.identifier
messageId match {
case id if isEmpty(id) => validate()
case id => // blabla
}
或没有 match
if (isEmpty(messageId)) {
validate()
} else {
// blabla
}
甚至
object EmptyString {
def unapply(s: String): Option[String] =
if (s == null || s.trim.isEmpty) Some(s) else None
}
message.identifier match {
case EmptyString(s) => validate()
case _ => // blabla
}
如果您要检查字符串是否为 null 或空,这里有一个单行代码可以执行此操作。你用一个选项包装它,使用过滤器来确保它不是空字符串,然后调用 getOrElse 来提供一个默认值,以防原始值为 null 或空字符串。
Option(s).filter(!_.isEmpty).getOrElse(columnName)
是否可以使用 match 检查字符串是否为空?
我正在尝试做类似的事情:
def sendToYahoo(message:Email) ={
val clientConfiguration = new ClientService().getClientConfiguration()
val messageId : Seq[Char] = message.identifier
messageId match {
case messageId.isEmpty => validate()
case !messageId.isEmpty => //blabla
}
}
但是我有一个编译错误。
提前致谢。
def isNullOrEmpty[T](s: Seq[T]) = s match {
case null => true
case Seq() => true
case _ => false
}
您可以编写一个简单的函数,例如:
def isEmpty(x: String) = Option(x).forall(_.isEmpty)
或
def isEmpty(x: String) = x == null || x.isEmpty
如果您认为 " "
也为空,您可能还想 trim 字符串。
def isEmpty(x: String) = x == null || x.trim.isEmpty
然后使用它
val messageId = message.identifier
messageId match {
case id if isEmpty(id) => validate()
case id => // blabla
}
或没有 match
if (isEmpty(messageId)) {
validate()
} else {
// blabla
}
甚至
object EmptyString {
def unapply(s: String): Option[String] =
if (s == null || s.trim.isEmpty) Some(s) else None
}
message.identifier match {
case EmptyString(s) => validate()
case _ => // blabla
}
如果您要检查字符串是否为 null 或空,这里有一个单行代码可以执行此操作。你用一个选项包装它,使用过滤器来确保它不是空字符串,然后调用 getOrElse 来提供一个默认值,以防原始值为 null 或空字符串。
Option(s).filter(!_.isEmpty).getOrElse(columnName)