欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Scala 的 模式匹配

Scala 的 模式匹配

2025/11/8 6:42:12 来源:https://blog.csdn.net/2303_82118663/article/details/144189343  浏览:    关键词:Scala 的 模式匹配

让我们来回顾一下如何输入身份证前两位:

76c25e40f0a048da839cd578f2f73a65.png

        //    val id = "429005202023210042"//    val id = "319005202023210042"//    val id = "119005202023210042"val id = "339005202023210042"

第一种方法:

    //预习val pre = id.substring(0, 2).toIntif (pre == 42) {println("湖北")} else if (pre == 33) {println("浙江")}else if (pre == 11){println("北京")}else if (pre == 31){println("上海")}else{println("其他")}

第二种方法:模式匹配

    //模式匹配//截取前两位val pre = id.substring(0,2).toIntpre match {case 42 => println("湖北")case 33 => println("浙江")case 11 => println("北京")case _ => println("其他")//细节一: case _ 的位置   一定要放在最后//细节二: case _ 不写    如果没有正确的匹配项,报错}

什么是模式匹配?

 

 

 

 

 

 

模式匹配格式如下:

package ob9object ob9_1 {def main(args: Array[String]): Unit = {//从数据库中获取1,2,3,4//要显示给用户的是    一等,二等,三等val level = 6val levelTxt = level match {case 1 => "一等"case 2 => "二等"case 3 => "三等"case 4 => "四等"case _ => "其他"}println(s"levelText:${levelTxt}")}}
package ob9object ob9_2 {//match case 匹配元组//能根据元组元素的个数来匹配,不是一一精确的匹配值def main(args: Array[String]): Unit = {//    val d1 = (1,2,3)val d1 = (1, 2, 3, 4)//    val d1 = (1,2,3,4,5)val d: Any = d1 //d的类型是Anyd match {case (x, y, z) => println(s"这是一个由三个元素的元组,它的第二个元素是:${y}")case (x, y, z, k) => println(s"这是一个由四个元素的元组,它的最后一个个元素是:${k}")case _ => println("未知类型")}}
}

也可以:

d1d583ec7212449ea9d6bba5daac9f49.png

import scala.io.StdInobject ob9_3 {def main(args: Array[String]): Unit = {//从控制台读入一个数字aval a = StdIn.readInt()//    if(a >= 0 && a <= 3) {println("[0-3]")}//    else if(a >= 4 && a <= 8) {println("[4-8]")}//    else {println("未匹配")}a match {case x if x >= 0 && x <= 3 => println("[0-3]")case x if x >= 4 && x <= 8 => println("[4-8]")case _ => println("未匹配")}}
}

练习:输入一个年份,是不是闰年

import scala.io.StdInobject ob9_4 {def main(args: Array[String]): Unit = {val year = StdIn.readInt()println(s"输入一个年份:$year")year match {
//      case x if x % 400 == 0 => println(s"$x 是闰年")case x if x % 4 == 0 && x % 100 != 0 => println("闰年")case _ => println("不是闰年")}}}

以及:

de495a57792847bfa2e84fef5d9cbfc8.png

object ob9_5 {def main(args: Array[String]): Unit = {val i = 1val j:Double = 1.2val b:Boolean = falseval x:Any = bx match {case _:Int => println(s"当前是Int")case _:Double => println(s"当前是Double")case a:Boolean => println(s"当前是Boolean $a")case _ => println("其他")}}}

还有:

50e63e6ad7954cf8a36b675e30d7b9f9.png

// 匹配 数组: 元素的个数 + 元素的特征
object ob_6 {def main(args: Array[String]): Unit = {val arr1 = Array(1,2,3)val arr2 = Array(0,2,3)val arr3 = Array(1,2,3,4)val arr4 = Array(-1,1,2,3,4)val b:Any = arr3b match {case Array(1,x,y) => println(s"数组第一个元素是1,一共有3个元素${x},${y}")case Array(1,x,y,z) => println("数组第一个元素是1,一共有4个元素")case Array(_,1,_*) => println("数组第一个元素是1,一共有n个元素")case _ => println("其他")}}
}

 

 

 

 

 

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词