Scala - case match partial string

hec6srdp  于 12个月前  发布在  Scala
关注(0)|答案(4)|浏览(112)

我有以下几点:

serv match {

    case "chat" => Chat_Server ! Relay_Message(serv)
    case _ => null

}

字符串
问题是,有时我也会在服务器字符串的末尾传递一个额外的参数,所以:

var serv = "chat.message"


有没有一种方法可以匹配字符串的一部分,以便它仍然被发送到Chat_Server?
感谢任何帮助,非常感谢:)

clj7thdc

clj7thdc1#

使用正则表达式,确保使用像_*这样的序列,例如:

val Pattern = "(chat.*)".r

serv match {
     case Pattern(_*) => "It's a chat"
     case _ => "Something else"
}

字符串
使用正则表达式,你甚至可以轻松地拆分参数和基字符串:

val Pattern = "(chat)(.*)".r

serv match {
     case Pattern(chat, param) => "It's a %s with a %s".format(chat, param)
     case _ => "Something else"
}

yrefmtwq

yrefmtwq2#

让模式匹配绑定到一个变量,并使用 guard 来确保变量以“chat”开头。

// msg is bound with the variable serv
serv match {
  case msg if msg.startsWith("chat") => Chat_Server ! Relay_Message(msg)
  case _ => null
}

字符串

qnzebej0

qnzebej03#

如果你想在使用正则表达式时消除任何分组,请确保使用像_*这样的序列号(按照Scala's documentation)。
从上面的例子:

val Pattern = "(chat.*)".r

serv match {
     case Pattern(_*) => "It's a chat"
     case _ => "Something else"
}

字符串

nfzehxib

nfzehxib4#

从Scala 2.13开始,您可以在比赛中使用s

serv match {
  case s"chat" => ...
  case s"chat.$msg" => doSomething(msg)
  ...
}

字符串

相关问题