让我们来回顾一下如何输入身份证前两位:
Scala
// val id = "429005202023210042"
// val id = "319005202023210042"
// val id = "119005202023210042"
val id = "339005202023210042"
第一种方法:
Scala
//预习
val pre = id.substring(0, 2).toInt
if (pre == 42) {
println("湖北")
} else if (pre == 33) {
println("浙江")
}else if (pre == 11){
println("北京")
}else if (pre == 31){
println("上海")
}else{
println("其他")
}
第二种方法:模式匹配
Scala
//模式匹配
//截取前两位
val pre = id.substring(0,2).toInt
pre match {
case 42 => println("湖北")
case 33 => println("浙江")
case 11 => println("北京")
case _ => println("其他")
//细节一: case _ 的位置 一定要放在最后
//细节二: case _ 不写 如果没有正确的匹配项,报错
}
什么是模式匹配?
模式匹配格式如下:
Scala
package ob9
object ob9_1 {
def main(args: Array[String]): Unit = {
//从数据库中获取1,2,3,4
//要显示给用户的是 一等,二等,三等
val level = 6
val levelTxt = level match {
case 1 => "一等"
case 2 => "二等"
case 3 => "三等"
case 4 => "四等"
case _ => "其他"
}
println(s"levelText:${levelTxt}")
}
}
Scala
package ob9
object 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的类型是Any
d match {
case (x, y, z) => println(s"这是一个由三个元素的元组,它的第二个元素是:${y}")
case (x, y, z, k) => println(s"这是一个由四个元素的元组,它的最后一个个元素是:${k}")
case _ => println("未知类型")
}
}
}
也可以:
Scala
import scala.io.StdIn
object ob9_3 {
def main(args: Array[String]): Unit = {
//从控制台读入一个数字a
val 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("未匹配")
}
}
}
练习:输入一个年份,是不是闰年
Scala
import scala.io.StdIn
object 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("不是闰年")
}
}
}
以及:
Scala
object ob9_5 {
def main(args: Array[String]): Unit = {
val i = 1
val j:Double = 1.2
val b:Boolean = false
val x:Any = b
x match {
case _:Int => println(s"当前是Int")
case _:Double => println(s"当前是Double")
case a:Boolean => println(s"当前是Boolean $a")
case _ => println("其他")
}
}
}
还有:
Scala
// 匹配 数组: 元素的个数 + 元素的特征
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 = arr3
b 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("其他")
}
}
}