scala中的字符串

45 阅读3分钟

一.String的定义

定义格式:

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

2.三引号:支持换行。

def main(args: Array[String]): Unit = {
  val name = "小花"
  val str = s"I like scala,${name}"
  val content =
    """
      cdnvnf
      |ncowdcn
      |cnownec
      """
    println(str)
    println(content)
  }

输出:

image.png

二.String的常用方法

1.索引访问

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

2. 长度获取

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

def main(args: Array[String]): Unit = {
 val str = "hello scala"
  println(str.length)
  println(str(0))

  println(str.substring(7,10))
  }

输出:

image.png

三.案例:拆分身份证号的秘密

  1. 前2位是省市的信息;

  2. 后四位是具体的乡镇信息;

  3. 接下来8位是生日;

  4. 倒数第2位表示性别;

  5. 最后一位是校验码;

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

  def main(args: Array[String]): Unit = {
   val idCard = "420905200410100083"
   val gender = getGender(idCard)
   val birthday = "10-10"
   val age = 23
   val province = "湖北"
   val zodiac = "天秤座" // 星座
   println("---------------------------")
   println(s" 籍贯:$province")
   println(s" 性别:$gender")
   println(s" 年龄:$age")
   println(s" 生日:$birthday")
   println(s" 星座:$zodiac")
   println("---------------------------")
  }

}

输出:

image.png

查询籍贯

def getProvince(idCard: String):String={
 val code = idCard.substring(0,2)
 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" -> "新疆维吾尔自治区",
  "81" -> "香港特别行政区",
  "82" -> "澳门特别行政区",
  "83" -> "台湾地区")
 map.getOrElse(code,"未知")
}

根据身份证查询年龄

def getAge(idCard:String): Int = {
 val year = idCard.substring(6,10)
 LocalDate.now().getYear - year.toInt
}

image.png

根据身份证信息查询星座

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 <= 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 "未知"
}

后面加上框内标注:

image.png

星座性格介绍

def getInfo(zodiac: String): String = {
 val map = Map(
  "摩羯" -> "刻苦耐劳,无洁癖,喜欢追求新鲜刺激,但有时冲动易怒,固执己见。",
  "金牛" -> "稳重踏实,物质主义,注重物质享受,但有时固执己见,对钱财看得较重。",
  "双子" -> "思维活跃,沟通能力强,适应力强,但有时见风使舵,不专注。",
  "巨蟹" -> "敏感温柔,家庭观念浓厚,得意忘形,但有时过于情绪化,依赖性强。",
  "狮子" -> "热情乐观,领导力强,讲义气,但有时刚愎自用,虚荣心大。",
  "处女" -> "细致安静,思考能力强,追求完美,但有时过于挑剔,吹毛求疵。",
  "天秤" -> "和谐优雅,公正理智,社交能力强,但有时优柔寡断,理想化。",
  "天蝎" -> "神秘莫测,胆识超群,爆发力强,但有时多疑,占有欲强。",
  "射手" -> "开朗乐观,爱自由冒险,但有时粗心大意,缺乏深度。",
  "摩羯" -> "稳健靠谱,有耐心和野心,但有时过于保守,缺乏热情。",
  "水瓶" -> "创新独立,理想主义,友善包容,但有时特立独行。",
  "双鱼" -> "浪漫善良,富有同情心,爱幻想,但有时意志薄弱,粗心大意。"
 )
 map.getOrElse(zodiac, "未知")
}

后面加上框内填充:

image.png