首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Scala中模式匹配数组?

如何在Scala中模式匹配数组?
EN

Stack Overflow用户
提问于 2011-07-11 15:49:05
回答 3查看 38.3K关注 0票数 72

我的方法定义如下

def processLine(tokens: Array[String]) = tokens match { // ...

假设我想知道第二个字符串是否为空

case "" == tokens(1) => println("empty")

不编译。我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-11 16:38:17

如果要对数组进行模式匹配以确定第二个元素是否为空字符串,可以执行以下操作:

def processLine(tokens: Array[String]) = tokens match {
  case Array(_, "", _*) => "second is empty"
  case _ => "default"
}

_*可以绑定到任意数量的元素,包括没有元素。这与下面的列表匹配类似,后者可能更为人所知:

def processLine(tokens: List[String]) = tokens match {
  case _ :: "" :: _ => "second is empty"
  case _ => "default"
}
票数 117
EN

Stack Overflow用户

发布于 2014-01-30 07:58:07

更酷的是,您可以为_*匹配的内容使用别名,如下所示

val lines: List[String] = List("Alice Bob Carol", "Bob Carol", "Carol Diane Alice")

lines foreach { line =>
  line split "\\s+" match {
    case Array(userName, friends@_*) => { /* Process user and his friends */ }
  }
}
票数 11
EN

Stack Overflow用户

发布于 2011-07-11 15:58:37

case语句不是这样工作的。这应该是:

case _ if "" == tokens(1) => println("empty")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6647166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档