当前位置: 首页 > 知识库问答 >
问题:

我可以在scala中组合多个字符串匹配案例吗?

璩珂
2023-03-14

我能不能把下面两个案例合并成一个case子句,因为它们都做同样的事情?

e match {
  case "hello" => e + "world"
  case "hi" => e + "world
}

此外,如果我想使用startsFor匹配,

e match { case e.startsWith("he") | e.startsWith("hi") => ... }

共有1个答案

奚修伟
2023-03-14

是的,您可以简单地使用或(|)匹配模式之一,

scala> "hi" match { case "hello" | "hi" => println("fantastic")  case _ => println("very very bad")}
fantastic

scala> "hello" match { case "hello" | "hi" => println("fantastic")  case _ => println("very very bad")}
fantastic

scala> "something else" match { case "hello" | "hi" => println("fantastic")  case _ => println("very very bad")}
very very bad

你也可以使用正则表达式进行模式匹配,当有很多标准需要匹配时尤其有用,

scala> val startsWithHiOrHello = """hello.*|hi.*""".r
startsWithHiOrHello: scala.util.matching.Regex = hello.*|hi.*

scala> "hi there" match { case startsWithHiOrHello() => println("fantastic")  case _ => println("very very bad")}
fantastic

scala> "hello there" match { case startsWithHiOrHello() => println("fantastic")  case _ => println("very very bad")}
fantastic

scala> "non of hi or hello there" match { case startsWithHiOrHello() => println("fantastic")  case _ => println("very very bad")}
very very bad

直接参考正则表达式上的Scala多类型模式匹配和Scala匹配大小写

 类似资料:
  • 反正有这样做的吗?

  • 我研究了一段时间,还没有找到匹配以下模式的线索(不过,我对regex也很陌生),它看起来像 或 所以我想将上面的字符串匹配并捕获为/abc/foo/bar。现在,“/stop”是一个可选字符串,可以附加在模式的末尾。目标是获得所需的捕获,同时忽略“stop”(如果“stop”存在多次,则在第一个“stop”处停止),同时允许在中间设置尽可能多的斜线(行尾的斜线除外)。 但它与以下任何项都不匹配:

  • 问题内容: 我如何在scala switch语句中执行一个case块后开始执行另一个case块的语句。(在Java中:不间断的情况)。 感谢帮助! 问题答案: 如果无法使用,可以使用一系列操作来解决,例如:

  • 问题内容: 情况如下: 我有一个已作为字符串抓取的网页。 我在MSSQL数据库中有几个字段。例如,汽车模型具有ID和名称,例如Mustang或Civic。它预装了大多数型号的汽车。 我想在我的模型表中找到任何匹配的行。因此,如果我的模型表中有Civic,Mustang和E350,我想在我抓取的页面上找到这三个中任何一个的出现情况。 在C#中执行此操作的有效方法是什么。我正在使用LINQ to SQ

  • 我对各种case类实现有一个封闭的特性。我想为同一个匹配表达式同时对多个类进行模式匹配。我似乎不能不分解case类和它们之间的“|” 目前看起来像: 代码中的另一个位置: