scala中的字符串

67 阅读1分钟

一.String 的定义

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

定义格式:

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

2.三引号。支持换行。

package stringid

object stringid01 {
  def main(args: Array[String]): Unit = {
    val name = "小花"
    val str = s"I like scala, $name"
    val content = """
      静夜思
      李白
      床前明月光,
      疑是地上霜。
      举头望明月,
      低头思故乡。
    """
    println(content)
  }
}

二.String 的常用方法

  1. 索引访问可以使用索引来访问字符串中的字符,索引从 0 开始。
  2. 长度获取使用length方法获取字符串长度。例如:
  3. 子串提取
  4. 字符串转成数字
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) )
  }
}

身份证号的基本知识和案例实现

import java.time.LocalDate

object stringid04 {
  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)
    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 <= 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 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"->"湖北"
    )
    map.getOrElse(code, "未知")
  }

  def main(args: Array[String]): Unit = {
    val idCard = "429005200403120083"
    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(s"-------------------------")
    println(s" 籍贯: ${province}")
    println(s" 性别: ${gender}")
    println(s" 年龄: ${age}")
    println(s" 生日: ${birthday}")
    println(s" 星座: ${zodiac}")
    println(s"性格介绍:${info}")
    println(s"-------------------------")
  }
}