检查字符串是否为空或Scala中是否不存在

Sou*_*nta 25 string scala option

我有一个Option[String].

我想检查是否存在字符串,如果存在则不是空白.

def isBlank( input : Option[String]) : Boolean = 
{ 
     input.isEmpty || 
     input.filter(_.trim.length > 0).isEmpty 
}
Run Code Online (Sandbox Code Playgroud)

在Scala中有更好的方法吗?

whe*_*ies 48

你应该做的是检查使用exists.像这样:

myOption.exists(_.trim.nonEmpty)
Run Code Online (Sandbox Code Playgroud)

True当且仅当Option[String]不是None而且不为空时才会返回.


elm*_*elm 6

一种基于模式匹配的方法,

def isBlank( input : Option[String]) : Boolean = 
  input match {
    case None    => true
    case Some(s) => s.trim.isEmpty
  }
Run Code Online (Sandbox Code Playgroud)


pra*_*upd 5

exists(接受的解决方案)当输入中至少有一个元素时将起作用,但当Some("")它是None.

exists检查是否至少有一个 element( x) 适用于函数。

例如。

scala> List[String]("apple", "").exists(_.isEmpty)
res21: Boolean = true

//if theres no element then obviously returns false
scala> List[String]().exists(_.isEmpty)
res30: Boolean = false
Run Code Online (Sandbox Code Playgroud)

同样的情况也发生在Option.empty,因为其中没有元素,

scala> Option.empty[String].exists(_.isEmpty)
res33: Boolean = false
Run Code Online (Sandbox Code Playgroud)

forall确保函数应用所有元素也是如此。

scala> def isEmpty(sOpt: Option[String]) = sOpt.forall(_.trim.isEmpty)
isEmpty: (sOpt: Option[String])Boolean

scala> isEmpty(Some(""))
res10: Boolean = true

scala> isEmpty(Some("non-empty"))
res11: Boolean = false

scala> isEmpty(Option(null))
res12: Boolean = true
Run Code Online (Sandbox Code Playgroud)

粗略的方法是过滤nonEmpty字符串,然后检查option.isEmpty.

scala> def isEmpty(sOpt: Option[String]) = sOpt.filter(_.trim.nonEmpty).isEmpty
isEmpty: (sOpt: Option[String])Boolean

scala> isEmpty(None)
res20: Boolean = true

scala> isEmpty(Some(""))
res21: Boolean = true
Run Code Online (Sandbox Code Playgroud)