Scala中的字符串—身份证中的秘密

22 阅读2分钟

一、String的定义

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

定义格式:

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

  2. 三引号。支持换行。

/*
  字符串
   1.理论
     两种定义格式 (1) 双引号
                (2) 三引号,支持换行
    (1) 获取指定下标的字符
    (2) 获取字符串的长度。length属性,空格也是字符
    (3) 获取子串

   2.应用:从身份证号中,解析出基本信息
 */

object String01 {
  def main(args: Array[String]): Unit = {
    val str1:String="hello scala"

    val str2:String="""
         静夜思
          李白
        床前明月光,
        """
    println(str2)

二、String的常用方法

(1)、索引访问

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

(2)、长度索取

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

(3)、字串提取

使用substring方法可以提取字符串的子串。

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

1) 获取指定下标的字符
    (2) 获取字符串的长度。length属性,空格也是字符
    (3) 获取子串

   2.应用:从身份证号中,解析出基本信息
 */

object String01 {
  def main(args: Array[String]): Unit = {
    val str1:String="hello scala"

//    val str2:String="""
//         静夜思
//          李白
//        床前明月光,
//        """
//    println(str2)

    println(str1(0))
    println(str1.length)

    // str1.substring(起点下标,中点下标-不包含)
    val str2=str1.substring(1,5) // ello
    println(str2)

    println(str1.substring(6,9)) // sca
  }

(4)、字符串转换成数字

示例:如何从身份证中分析出性别

字符转成数字

charAt() :得到的是字符,如果对字符使用toInt,就会得到对于的ASCII码。

asDigit :正确的使用方式是用asDiget。

import java.time.LocalDate


/**
 * 字符串
 *1.理论
     *两种定义格式 (1) 双引号
                *(2) 三引号,支持换行
    *(1) 获取指定下标的字符
    *(2) 获取字符串的长度。length属性,空格也是字符
    *(3) 获取子串
 *
 *2.应用:从身份证号中,解析出基本信息
    *示例:42900519840622  00  51
 *
 *(1) 省份:42 湖北, 43 湖南, 11 北京.....
    *(2) 市区,乡镇 9005
    *(3) 出生年份 1984
    *(4) 出生日期 0622
    *(5) 顺序码 00
    *(6) 倒数第二位 5,奇数表示性别:男  偶数:女
    *(7) 最后一位,是校验码。验证这个身份证是不是瞎编的!!!!
 */

object String02 {

    def getGender(idCard:String):String={
      val gender=idCard.substring(16,17).toInt
      if(gender%2==0)
        "女"
      else
        "男"
      }

    def getBirthday(idCard: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 main(args: Array[String]): Unit = {
        val idCard="42900520001010026"
        val gender=getGender(idCard)
        val birthday=getBirthday(idCard)

        val age=getAge(idCard)

        println(
          s"""
              性别:${gender}
              生日:${birthday}
              籍贯:湖北省
              年龄:${age}
              星座:xx座
             """)
    }