Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何基于字符对字符串进行模式匹配?_Scala - Fatal编程技术网

Scala 如何基于字符对字符串进行模式匹配?

Scala 如何基于字符对字符串进行模式匹配?,scala,Scala,在我的代码中,字符串应具有以下结构part1-part2-part3。不同部分由-分隔,只能有3个部分 到目前为止,我使用了String的split方法,可以检查返回的数组的长度来验证结构: val tagDetails: Array[String] = tag.split('-') //syntax of received tag is part1-part2-part3 if (tagDetails.length == 3) { val course: String = tagDeta

在我的代码中,字符串应具有以下结构
part1-part2-part3
。不同部分由
-
分隔,只能有3个部分

到目前为止,我使用了
String
split
方法,可以检查返回的
数组的长度来验证结构:

val tagDetails: Array[String] = tag.split('-') //syntax of received tag is part1-part2-part3

if (tagDetails.length == 3) {
  val course: String = tagDetails(0)
  val subject: String = tagDetails(1)
  val topic: String = tagDetails(2)
  println("splitted tag " + course + ", " + subject + ", " + topic) 
} else {..}

如何使用
match
执行相同操作?

您可以使用
match
来分解拆分值的数组

val tag = "course-subject-topic"

tag.split('-') match {
  case Array(course, subject, topic) =>
    println("splitted tag " + course + ", " + subject + ", " + topic)
  case _ => println("Oops")
}
模式匹配也可以具有
if
保护,如下所示

tag.split('-') match {
  case Array(course, subject, topic) if course != subject =>
    println("splitted tag " + course + ", " + subject + ", " + topic)
  case _ => println("Oops")
}

参考-

Scala 2.13
开始,可以通过以下方式对
字符串进行模式匹配:

"part1-part2-part3" match {
  case s"$course-$subject-$topic" =>
    println(s"Split tag $course, $subject, $topic")
  case _ =>
    println("Oops")
}
// Splitted tag part1, part2, part3