scala中的字符串

36 阅读2分钟

String的定义

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

两种定义格式

1. 双引号

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)
    println(str1(0))
    println(str1.length)
    //str1.substring(起点下标,终点下标-不包含)
    val str2=str1.substring(1,5) //ello
    println(str2)

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

关于字符串的应用

基本代码

/**
 *
 *  字符串
 *  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 main(args: Array[String]): Unit = {
//    val idCard="429005200010100026"
//
//    //输出一些基本信息
//
//    /*
//    * 性别:女
//    * 生日:2000-10-10
//    * 籍贯:湖北省
//    * 年龄:25
//    * 星座:xx座
//     */
//  }
//}
object string02 {
  def main(args: Array[String]): Unit = {
    val idCard = "429005200010100026"

    // 1. 解析性别(第17位:奇数男,偶数女)
    val genderCode = idCard.charAt(16).toString.toInt
    val gender = if (genderCode % 2 == 0) "女" else "男"

    // 2. 解析生日(第7-14位:yyyyMMdd)
    val birthYear = idCard.substring(6, 10)
    val birthMonth = idCard.substring(10, 12)
    val birthDay = idCard.substring(12, 14)
    val birthday = s"$birthYear-$birthMonth-$birthDay"

    // 3. 解析籍贯(前2位:省级行政区划代码)
    val provinceCode = idCard.substring(0, 2)
    val province = provinceCode match {
      case "42" => "湖北省"
      case "11" => "北京市"
      case "31" => "上海市"
      case "44" => "广东省"
      // 可扩展更多省份编码
      case _ => "未知省份"
    }

    // 4. 计算年龄(基于当前年份)
    import java.time.LocalDate
    val currentYear = LocalDate.now().getYear
    val age = currentYear - birthYear.toInt

    // 5. 判断星座
    val month = birthMonth.toInt
    val day = birthDay.toInt
    val constellation = getConstellation(month, day)

    // 输出结果
    println(s"性别:$gender")
    println(s"生日:$birthday")
    println(s"籍贯:$province")
    println(s"年龄:$age")
    println(s"星座:$constellation")
  }

  /**
   * 根据月份和日期判断星座
   * @param month 月份
   * @param day 日期
   * @return 星座名称
   */
  def getConstellation(month: Int, day: Int): String = {
    (month, day) match {
      case (1, 20) | (2, _) if day <= 18 => "水瓶座"
      case (2, 19) | (3, _) if day <= 20 => "双鱼座"
      case (3, 21) | (4, _) if day <= 19 => "白羊座"
      case (4, 20) | (5, _) if day <= 20 => "金牛座"
      case (5, 21) | (6, _) if day <= 21 => "双子座"
      case (6, 22) | (7, _) if day <= 22 => "巨蟹座"
      case (7, 23) | (8, _) if day <= 22 => "狮子座"
      case (8, 23) | (9, _) if day <= 22 => "处女座"
      case (9, 23) | (10, _) if day <= 23 => "天秤座"
      case (10, 24) | (11, _) if day <= 22 => "天蝎座"
      case (11, 23) | (12, _) if day <= 21 => "射手座"
      case _ => "摩羯座"
    }
  }
}