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

32 阅读1分钟

1.String的定义

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

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

2.三引号:支持换行

package stringid

/*
*String  类型,字符串
*
*
*定义字符串:
*   1.双引号
*   2.三引号
 */
object stringid01 {
  def main(args: Array[String]): Unit = {
    val name = "小花"

    val str = s"I like scala, ${name}"

    val content =
      """
                     静夜思
                      李白
                   床前明月光,
                   疑是地上霜。
                   举头望明月,
                   低头思故乡。
        """

    println(content)
  }
}

2.String 的常用方法

1.索引访问

2.长度获取

3.子串提取

4.字符串转成数字

/*
*String  类型,字符串
*
*
* 常用方法:
*   1.长度:length属性
*   2.下标,从0开始,表示第一个字符
*   3.截取,在一个唱的字符串中,取出一部分
 */
object stringid02 {
  def main(args: Array[String]): Unit = {


    val str = "hello scala"


    println(str.length)

    println(str(0))

    //2.取出“llo” 这个三个字符
    println(str.substring(2,5))

    //取出“cal” 这个三个字符
    println(str.substring(   7 ,  10 ))
   }
}

3.案例实现:输入身份证号输出基本信息

import java.time.LocalDate
package stringid {

  /*
*案例,拆分身份证号的秘密
*
*
 */
  object stringid03 {


    //倒数第二个数:奇数,男 ; 偶数,女
    def getGender(idCard: String): String = {
      val g = idCard.substring(16, 17).toInt
      if (g % 2 == 1) {
        "男"
      } else {
        "女"
      }
    }

    def getAge(idCard: String): Int = {
      //根据身份证号这种的出生日期,计算年龄
      val year = idCard.substring(6, 10)
      //今年的年份 - year
      LocalDate.now().getYear - year.toInt
    }

    def getProvince(idCard: String): String = {
      val code = idCard.substring(0, 2) // 11
      val map = Map("11" -> "北京市", "12" -> "天津市", "13" -> "河北省", "14" -> "山西省", "15" -> "内蒙古自治区", "21" -> "辽宁省", "22" -> "吉林省", "23" -> "黑龙江省", "31" -> "上海市", "32" -> "江苏省", "33" -> "浙江省", "34" -> "安徽省", "35" -> "福建省", "36" -> "江西省", "37" -> "山东省", "41" -> "河南省", "42" -> "湖北省", "43" -> "湖南省", "44" -> "广东省", "45" -> "广西壮族自治区", "46" -> "海南省", "50" -> "重庆市", "51" -> "四川省", "52" -> "贵州省", "53" -> "云南省", "54" -> "西藏自治区", "61" -> "陕西省", "62" -> "甘肃省", "63" -> "青海省", "64" -> "宁夏回族自治区", "65" -> "新疆维吾尔自治区", "71" -> "台湾省", "81" -> "香港特别行政区", "82" -> "澳门特别行政区")
      map.getOrElse(code, "未知")
    }


    def getBirthday(idCard: String): String = {
      val month = idCard.substring(10, 12)
      val day = idCard.substring(12, 14)
      month + "-" + day
    }

    // 根据身份证号判断星座
    def getZodiac(idCard: String): String = {
      val month = idCard.substring(10, 12).toInt
      val day = idCard.substring(12, 14).toInt

      if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) "水瓶座"
      else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) "双鱼座"
      else if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) "白羊座"
      else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) "金牛座"
      else if ((month == 5 && day >= 21) || (month == 6 && day <= 21)) "双子座"
      else if ((month == 6 && day >= 22) || (month == 7 && day <= 22)) "巨蟹座"
      else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) "狮子座"
      else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) "处女座"
      else if ((month == 9 && day >= 23) || (month == 10 && day <= 23)) "天秤座"
      else if ((month == 10 && day >= 24) || (month == 11 && day <= 22)) "天蝎座"
      else if ((month == 11 && day >= 23) || (month == 12 && day <= 21)) "射手座"
      else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) "摩羯座"
      else "未知星座"
    }


    def getInfo(zodiac: String): String = {
      val map = Map(
        "白羊座" -> "热情奔放,充满活力,喜欢追求新鲜刺激,但有时冲动易怒,固执己见。",
        "金牛座" -> "稳重务实,勤奋踏实,注重物质享受,但有时固执己见,对钱财看得较重。",
        "双子座" -> "思维敏捷,沟通能力强,适应力强,但有时喜新不安份,不够专注。",
        "巨蟹座" -> "敏感温柔,家庭观念浓厚,保护意识强,但有时过于情绪化,依赖性强。",
        "狮子座" -> "自信热情,有领导能力,讲义气,但有时耐不住寂寞,显得自大。",
        "处女座" -> "细致完美,思路清晰,待人真诚,但有时过于挑剔,吹毛求疵。",
        "天秤座" -> "和蔼美感,公正理智,社交能力强,但有时优柔寡断,理想化。",
        "天蝎座" -> "神秘坚定,敏锐洞察力强,但有时孤傲复杂,多疑狂妄。",
        "射手座" -> "开朗乐观,爱自由冒险,但有时粗心大意,缺乏深度。",
        "摩羯座" -> "稳重谨慎,有耐心和野心,但有时过于保守功利,缺乏热情。",
        "水瓶座" -> "创新独立,理想主义,友善疏离,有时过于固执,粗心大意。",
        "双鱼座" -> "浪漫敏感,富有同情心,爱幻想,但有时意志薄弱,粗心大意。"
      )
      map.getOrElse(zodiac, "未知")
    }

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

      val gender = getGender(idCard)
      val birthday = getBirthday(idCard)
      val age = getAge(idCard)
      val province = getProvince(idCard)
      val zodiac = getZodiac(idCard) // /星座
      val info = getInfo(zodiac)
      println("------------------------------")
      println(s" 籍贯: ${province}")
      println(s" 性别: ${gender}")
      println(s" 年龄: ${age}")
      println(s" 生日: ${birthday}")
      println(s" 星座: ${zodiac}")
      println(s" 性格介绍: ${info}")
      println("------------------------------")
    }
  }
}