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

31 阅读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)
  }
}

(二)String 的常用方法

package stringid

/*
* String 类型,字符串
* 常用的方法
*     1 长度 length 属性
*     2 截取  在一个长的字符串中,取出一部分
 */

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))

  }
}
package stringid

/*
*案例:拆分身份证号的秘密
* 1 倒数第二个数:奇数男偶数女
 */

object stringid03 {
    def getGender(idCard:String):String = {
      val g = idCard.substring(16,17).toInt
      if(g % 2 == 1){
        "男"
      }else{
        "女"
      }
  }
  def getProvince(idCard:String):String = {
    val code = idCard.substring(0,2) //11
    val map = Map("11"->"北京","12"->"天津","13"->"河北","14"->"山西","15"->"内蒙古")
    map.getOrElse(code,"未知")
  }
  def getBirthay(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<= 20)) "双子座"
    else if ((month == 6 && day >= 21) || (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<= 22)) "天秤座"
    else if ((month == 10 && day >= 23) || (month == 11 && day<= 21)) "天蝎座"
    else if ((month == 11 && day >= 22) || (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 = "420682200404262026"

    val gender = getGender(idCard)
    val birthday = "10-10"
    val age = 21
    val province =getProvince(idCard)
    val zodiac = "天秤座"  //星座
    println(s"-----------------------------")
    println(s" 籍贯: ${province}")
    println(s" 性别: ${gender}")
    println(s" 年龄: ${age}")
    println(s" 生日: ${birthday}")
    println(s" 星座: ${zodiac}")
    println(s"--------------------------------")
  }
}