scala中的字符串

43 阅读1分钟

(一) String 的定义

String 在 Scala 中是不可变的字符序列,这意味着一旦创建,其内容就不能被修改。
package stringid
/*
String类型,字符串
  定义字符串:
    1. 双引号
    2. 三引号,支持换行
*/
object stringid01 {
  def main(args: Array[String]): Unit = {
    val name = "I like scala"
    val str = s"I like scala, ${name}"
    val content =
      """
        静夜思
        李白
        床前明月光,
        疑是地上霜。
        举头望明月,
        低头思故乡。
      """
    println(content)
  }
}

(二) String 的常用方法

1.索引访问 :可以使用索引来访问字符串中的字符,索引从 0 开始。
2.长度获取: 使用length方法获取字符串长度。例如
package stringid
/*
 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.子串提取:使用substring方法可以提取字符串的子串。
4.字符串转成数字:字符转成数字
charAt() 得到的是字符,如果对字符使用toInt,就会得到对于的ASCII码。
asDigit。正确的使用方式是用asDiget

(三)身份证号的基本知识

举例某个同学的身份证信息,讲解
1·前2位是省市的信息;
2·后四位是具体的乡镇信息;
3·接下来8位是生日;
4·倒数第2位表示性别;

5·最后一位是校验码;

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

package stringid

import java.time.LocalDate

// 案例:拆分身份证号的秘密
// 1. 倒数第二个数:奇数:男;偶数:女
object stringid03 {
  // 根据身份证号判断性别
  def getGender(idCard: String): String = {
    val g = idCard.substring(14, 17).toInt
    if (g % 2 == 1) {
      "男"
    } else {
      "女"
    }
  }
    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" -> "重庆")
      map.getOrElse(code, "未知")
    }
  def getAge(idCard:String):Int = {
    val year = idCard.substring(6,10)
    LocalDate.now().getYear - year.toInt
  }
  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 <= 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 = "123456789101112083"
      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("--------------------------")
    }


}