scala中的字符串-身份证中的秘密

23 阅读3分钟

(一)String 的定义

String 在 Scala 中是不可变的字符序列,这意味着一旦创建,其内容就不能被修改。

定义格式:

1.双引号: val str = "xxxx"

2.三引号。支持换行。

(二)String 的常用方法

1.索引访问*

可以使用索引来访问字符串中的字符,索引从 0 开始。例如:

val str = "Scala"

println(str(0)) // 输出:S

2. 长度获取

使用length方法获取字符串长度。例如:

val str = "Scala is great"

println(str.length) // 输出:14

【学生练习: 重点练习下标索引越界的情况】

0 3. 子串提取

【教师提问:如果你知道了一个同学的身份证号,你可以知道ta的生日吗?】

[案例:从身份证号中分析得到有效信息]。使用substring方法可以提取字符串的子串。

格式: subString(起点,终点-不包括)例如:

val str = "429005200112130042"

println(str.substring(7)) // 获取身份证号中的生日

println(str.substring(0, 5)) // 根据身份证号中的倒数第二位,来判断学生的性别。

(四)案例实现:输入身份证号输出基本信息

(四)案例实现:输入身份证号输出基本信息****
package string

import java.time.LocalDate

/*
字符串
1.理论
两种定义格式(1)双引号 (2) 三引号 ,支持换行
(1)获取指定下标上的字符
(2)获取字符串的长度。 lengyh属性,空格也是字符
(3)获取字符串,只需要一个长字符中的一部分


2.应用:从身份证号中,解析出基本信息
示例:429005198406220051
  (1) 省份:42 湖北,  43 湖南,  11北京
  (2)市区,乡镇  9005
  (3)出生年份   1984
  (4)出生日期  0622
  (5)顺序码  00
  (6)倒数第二位 5  奇数表示性别:男,    偶数:女
  (7)最后一位,是校验码。  验证这个身份证号是不是瞎编的



 */


object string3 {

  def getGender(idCard:String):String={
    val gender=idCard.substring(16,17).toInt
    if (gender %2==0)
      "女"
      else
        "男"
  }
  def getBirthday(idCard:String):String={
    val year=idCard.substring(6,10)
    val month=idCard.substring(10,12)
    val day=idCard.substring(12,14)
    year+"-"+month+"-"+day
  }

  def getAge(idCard:String):Int={
    val year=idCard.substring(6,10).toInt
    //获取当前年份
    val currentYear=LocalDate.now().getYear
    currentYear-year

  }

  def getProvince(idCard:String):String={
    val procode=idCard.substring(0,2)
    //42 -->湖北省
    val provinceMap=Map(
      "11" -> "北京市",
      "12" -> "天津市",
      "31" -> "上海市",
      "50" -> "重庆市",

      // 省(按代码顺序)
      "13" -> "河北省",
      "14" -> "山西省",
      "15" -> "内蒙古自治区", // 自治区
      "21" -> "辽宁省",
      "22" -> "吉林省",
      "23" -> "黑龙江省",
      "32" -> "江苏省",
      "33" -> "浙江省",
      "34" -> "安徽省",
      "35" -> "福建省",
      "36" -> "江西省",
      "37" -> "山东省",
      "41" -> "河南省",
      "42" -> "湖北省",
      "43" -> "湖南省",
      "44" -> "广东省",
      "45" -> "广西壮族自治区", // 自治区
      "46" -> "海南省",
      "51" -> "四川省",
      "52" -> "贵州省",
      "53" -> "云南省",
      "54" -> "西藏自治区", // 自治区
      "61" -> "陕西省",
      "62" -> "甘肃省",
      "63" -> "青海省",
      "64" -> "宁夏回族自治区", // 自治区
      "65" -> "新疆维吾尔自治区", // 自治区
      "71" -> "台湾省",
      "81" -> "香港特别行政区", // 特别行政区
      "82" -> "澳门特别行政区"  // 特别行政区
    )
    provinceMap.getOrElse(procode,"未知")
  }


  def main(args: Array[String]): Unit = {
    val idCard="420052000010100026"

    val gender=getGender(idCard)
    val birthday=getBirthday(idCard)

    val age=getAge(idCard)
    val province=getProvince(idCard)
    println(s"""
    性别:${gender}
    生日:${birthday}
    籍贯:${province}
    年龄:${age}
    星座:xx座
      """
    )


    //输出一些基本信息

    /*
    性别:女
    生日:2000-10-10
    籍贯:湖北省
    年龄:25
    星座:xx座
     */

  }

}

image.png