Scala:字符串模式匹配

时间:2017-10-23 14:22:56

标签: scala match

下面的代码取字符串的前两个字符并检查pattern是"de" or None它返回None否则返回Test("Found")

val s =Option("abc")
val t = s.map(_.take(2))
case class Test(id:String)

t match {
  case Some("de") => None
  case None => None
  case _ => Test("Found")
}

任何人都可以建议一个有效的案例匹配解决方案

2 个答案:

答案 0 :(得分:2)

我想我得到你所要求的,所以让我试一试:

val condition = Option("abc").exists(_.toLower.take(2) == "de")
val output: Any = if(condition) Test("found") else None

如果falseOption,则第一部分会返回None。如果字符串的前两个字母是false,则它也会以不区分大小写的方式返回"de"

第二部分返回NoneTest对象。但是,我想指出这导致Any。您的意思是返回Option[Test]类型吗?

答案 1 :(得分:1)

我认为,在你的片段的最后一行中,你的意思是Some(Test("Found")),从你对另一个答案的评论来判断。 如果是这样,这就是你要找的东西:

t.filterNot(_.take(2) == "de").map(_ => Test("Found"))