我在List [Char]上的一些模式匹配上苦苦挣扎。我想提取括号括起来的子列表。所以,我想提取"测试"作为列表[Char]给出"(test)"。所以基本上匹配列表('(',列表[字符],')')。我可以匹配列表('(',t,')')其中t是单个字符,但不是可变数量的字符。
应如何宣布?
val s = "(test)"
s match {
case List('(',t,')') => {
println("matches single character")
}
case '('::x::y => {
//x will be the first character in the List[Char] (after the '(') and y the tail
}
}
答案 0 :(得分:4)
s match {
case '(' +: t :+ ')' => ...
}
阅读Scala中的自定义提取器,然后查看http://www.scala-lang.org/api/2.11.8/index.html#scala.collection。$ colon $ plus $以了解它是如何工作的。
请注意,它会匹配任何合适的Seq[Char]
,但字符串不是真的一个;它只能被转换(隐式或显式)。所以你可以使用
val s: Seq[Char] = ...some String or List[Char]
val s = someString.toSeq
我希望String的性能应该足够好(如果它很关键,不要使用它);但对于大List[Char]
,这将非常缓慢。