string - Scala、模式匹配、字符串

标签 string scala pattern-matching

有没有办法像这样匹配scala中的字符串:

  def matcher(arg: String) : Expr = {
    case left :: '*' :: right => new Binary("*", left, right)
    case left :: '+' :: right => new Binary("+", left, right)
  }

哪里的 left 和 right 是 String 类型?

最佳答案

您可以通过匹配正则表达式来实现您的目标。

trait Expr

case class Binary(op: String, leftOperand: String, rightOperand: String) extends Expr

val mulPattern = "(\\d*)\\*(\\d*)".r
val addPattern = "(\\d*)\\+(\\d*)".r

def matcher(arg: String) : Expr = {
  arg match {
    case mulPattern(left, right) => new Binary("*", left, right)
    case addPattern(left, right) => new Binary("+", left, right)
  }
}

def main(args: Array[String]): Unit = {
  println(matcher("1+2")) // Binary("+", "1", "2")
  println(matcher("3*4")) // Binary("*", "3", "4")
} 

关于string - Scala、模式匹配、字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053646/

相关文章:

c++ - 使用 c++/boost::regex 提取 HTML 文件的特定部分

java - for 循环打印 - 与字长一样多?

scala - 如何使用 Numeric[T] 表示任何数字类型的零

macos - 让 Scala 解释器工作

haskell - 为什么在模式匹配时这在 Haskell 中是一个有用的警告? "Defined but not used"

string - Delphi 中的 IP 地址字符串例程?

C++从函数调用的多个返回构建字符串 vector 的最佳方法

scala - Scala的shebang行是什么,它不会破坏mimetype?

java - MySQL 重复事件

f# - 记录模式匹配