一,String的定义
String 在 Scala 中是不可变的字符序列,这意味着一旦创建,其内容就不能被修改。
定义格式:
1.双引号: val str = "xxxx"
2.三引号。支持换行。
package string
/*
*
* 字符串:
* 格式1: 双引号
* 格式2: 三引号,支持换行
*/
object string01 {
def main(args: Array[String]): Unit = {
val str1 = "静夜思 李白 429015655440023x"
val str2 =
"""静夜思
李白
"""
println(str1)
println(str2)
}
}
二,String的常用方法
1,获取带个字符
2,字符串的长度,空格也是有效的字符,它也会占长度
3,字符串的截取:从当前字符串中,截取一段出来 subString(起点下标,终点下标,不包含)
4,转成数字
package string
/*
*
* 字符串:
* 常见操作
* 1,获取带个字符
* 2,字符串的长度,空格也是有效的字符,它也会占长度
* 3,字符串的截取:从当前字符串中,截取一段出来 subString(起点下标,终点下标,不包含)
* 4,转成数字
*/
object string02 {
def main(args: Array[String]): Unit = {
val str1 = "hello scala"
// 字符串(下标),下标从0开始
println(str1(0))
println("字符串的长度是:"+ str1.length)
// 把ello这字符取出来
val str2 = str1.substring(1,5)
println(str2)
// 把cal这三个字符取出来?
// val str3 = str1.substring(7,10)
// println(str3)
val str3 = "我的手机号的第三位是31"
//
val str4 = str3.substring(10,12)// str5是一个字符串“4”
println(str4 + 10)// 310
val n = str4.toInt
println(n + 1)
}
}
三,身份证号的秘密
前2位是省市的信息;
后四位是具体的乡镇信息;
接下来8位是生日;
倒数第2位表示性别;
最后一位是校验码;
package string
import java.time.{LocalDate, Year}
import java.time.temporal.TemporalQueries.localDate
/*
*任务:从键盘输入一个身份证号码
* 写程序,提取信息
*
* 1,性别
*/
object string03 {
def main(args: Array[String]): Unit = {
// 省份编码映射表(完整覆盖全国34个省级行政区)
val provinceCodeMap: Map[String, String] = Map(
"11" -> "北京市",
"12" -> "天津市",
"13" -> "河北省",
"14" -> "山西省",
"15" -> "内蒙古自治区",
"21" -> "辽宁省",
"22" -> "吉林省",
"23" -> "黑龙江省",
"31" -> "上海市",
"32" -> "江苏省",
"33" -> "浙江省",
"34" -> "安徽省",
"35" -> "福建省",
"36" -> "江西省",
"37" -> "山东省",
"41" -> "河南省",
"42" -> "湖北省",
"43" -> "湖南省",
"44" -> "广东省",
"45" -> "广西壮族自治区",
"46" -> "海南省",
"50" -> "重庆市", // 注意:重庆编码是50,不是30
"51" -> "四川省",
"52" -> "贵州省",
"53" -> "云南省",
"54" -> "西藏自治区",
"61" -> "陕西省",
"62" -> "甘肃省",
"63" -> "青海省",
"64" -> "宁夏回族自治区",
"65" -> "新疆维吾尔自治区",
"71" -> "台湾省",
"81" -> "香港特别行政区",
"82" -> "澳门特别行政区"
)
while (true) {
val str = scala.io.StdIn.readLine("请输入你要判断的身份证号:")
//判断是否18位
if (str.length == 18) {
// 取出倒数第二位
val gender = str.substring(16, 17).toInt
println(gender)
//性别
val genderNum = str.charAt(16).asDigit
// 取出奇偶数
if (genderNum % 2 == 1) {
// 输出
println("这是一个帅哥")
} else {
println("这是一个小姑娘")
}
val birth = str.substring(6, 10).toInt
println(birth)
// 用今年
val age = Year.now().getValue() - birth
println(s"年龄为${age}岁")
//判断省份
val provinceCode = str.substring(0,2)//从身份证中获取省份
val province = provinceCodeMap.getOrElse(provinceCode, s"未知省份(编码:$provinceCode)")
println(s"所属省份:$province")
}
else
{
println(s"${str}不是一个合法的身份证号,长度不对")
}
}
}
}
1,
package array
import java.time.format.DateTimeFormatter
import java.time.{LocalDate, Year}
object String05 {
def main(args: Array[String]): Unit = {
// 1. 省份编码映射表(完整省级行政区)
val provinceCodeMap: Map[String, String] = 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" -> "新疆维吾尔自治区",
"71" -> "台湾省", "81" -> "香港特别行政区", "82" -> "澳门特别行政区"
)
// 2. 星座映射(月份+日期范围)
val constellationMap: List[(Int, Int, Int, Int, String)] = List(
(1, 20, 2, 18, "水瓶座"), (2, 19, 3, 20, "双鱼座"),
(3, 21, 4, 19, "白羊座"), (4, 20, 5, 20, "金牛座"),
(5, 21, 6, 21, "双子座"), (6, 22, 7, 22, "巨蟹座"),
(7, 23, 8, 22, "狮子座"), (8, 23, 9, 22, "处女座"),
(9, 23, 10, 23, "天秤座"), (10, 24, 11, 22, "天蝎座"),
(11, 23, 12, 21, "射手座"), (12, 22, 1, 19, "摩羯座")
)
// 3. 星座对应的性格参考(示例)
val constellationPersonality: Map[String, String] = Map(
"水瓶座" -> "核心特质:独立先锋、脑洞清奇\n优点:创新力强、尊重差异、理性通透\n小缺点:忽冷忽热、过于理想化",
"双鱼座" -> "核心特质:浪漫共情、温柔敏感\n优点:善解人意、想象力丰富、重感情\n小缺点:容易emo、偶尔逃避现实",
"白羊座" -> "核心特质:热情敢冲、直率坦荡\n优点:行动力强、乐观自信、讲义气\n小缺点:急性子、偶尔冲动莽撞",
"金牛座" -> "核心特质:稳重务实、慢热长情\n优点:靠谱踏实、耐心专一、生活质感强\n小缺点:有点固执、偶尔太“慢半拍”",
"双子座" -> "核心特质:机灵多变、好奇心爆棚\n优点:口才好、适应力强、有趣会玩\n小缺点:三分钟热度、偶尔“没走心”",
"巨蟹座" -> "核心特质:顾家念旧、温柔体贴\n优点:共情力强、细心周到、重情义\n小缺点:容易敏感内耗、有点恋旧执拗",
"狮子座" -> "核心特质:自信耀眼、慷慨大气\n优点:领导力强、乐观开朗、真诚仗义\n小缺点:好面子、偶尔有点小傲娇",
"处女座" -> "核心特质:细致严谨、追求极致\n优点:责任心强、逻辑清晰、靠谱周到\n小缺点:有点完美主义、偶尔太较真",
"天秤座" -> "核心特质:优雅平衡、社交达人\n优点:情商高、公正温和、审美在线\n小缺点:选择困难、偶尔有点“老好人”",
"天蝎座" -> "核心特质:神秘敏锐、执着坚定\n优点:洞察力强、专一长情、有韧性\n小缺点:有点记仇、偶尔太较真",
"射手座" -> "核心特质:自由乐观、热爱冒险\n优点:心胸开阔、幽默风趣、行动力强\n小缺点:有点散漫、偶尔“没心没肺”",
"摩羯座" -> "核心特质:沉稳务实、目标感强\n优点:踏实肯干、责任心强、抗压能力棒\n小缺点:有点闷、偶尔太“卷”自己"
)
// 循环读取身份证号
while (true) {
val idCard = scala.io.StdIn.readLine("请输入18位身份证号:").trim
// 验证长度
if (idCard.length != 18) {
println("请输入合法的18位身份证号!")
println("------------------------")
}
try {
// 提取省份(前2位)
val provinceCode = idCard.substring(0, 2)
val province = provinceCodeMap.getOrElse(provinceCode, "未知省份")
// 提取性别(第17位,奇数男/偶数女)
val genderCode = idCard.charAt(16).asDigit
val gender = if (genderCode % 2 == 1) "男" else "女"
// 提取生日(第7-14位:yyyyMMdd)
val birthStr = idCard.substring(6, 14)
val birthDate = LocalDate.parse(birthStr, DateTimeFormatter.ofPattern("yyyyMMdd"))
val birthFormat = birthDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
// 计算年龄
val currentYear = Year.now().getValue
val birthYear = birthDate.getYear
val age = currentYear - birthYear
// 计算星座
val month = birthDate.getMonthValue
val day = birthDate.getDayOfMonth
val constellation = constellationMap.find {
case (sMonth, sDay, eMonth, eDay, _) =>
if (sMonth <= eMonth) (month == sMonth && day >= sDay) || (month == eMonth && day <= eDay)
else (month == sMonth && day >= sDay) || (month == eMonth && day <= eDay)
}.map(_._5).getOrElse("未知星座")
// 获取性格参考
val personality = constellationPersonality.getOrElse(constellation, "暂无性格参考")
// 按要求顺序输出
println(s"籍贯:$province")
println(s"性别:$gender")
println(s"年龄:${age}岁")
println(s"生日:$birthFormat")
println(s"星座:$constellation")
println(s"性格:$personality(参考星座物语)")
} catch {
case _: Exception =>
println("身份证号格式错误,请检查后重新输入!")
}
println("------------------------")
}
}
}