当前位置: 首页 > article >正文

Scala(Array,List,Set,Map,Tuple,字符串 使用的简单介绍)

目录

Array 不可变数组

 ArrayBuffer可变数组

List 不可变列表

ListBuffer 可变列表

Set 集合(可变不可变)

Map映射(可变不可变)(键值对) 

Tuple 元组 

 字符串

Array 不可变数组

//    Array 数组

    // scala 中的数组下标是()
    // scala 中的数组是值类型,不是引用类型
    // scala 中的数组是定长的,一旦创建,长度不可变


    // 创建一个长度为3的数组,并初始化
    val arr = Array[String]("apple", "banana", "orange")

    // 创建一个长度为3的数组
    val arr1 = new Array[String](3)

    // 给数组赋值
    arr1(0) = "apple"
    arr1(1) = "banana"
    arr1(2) = "orange"

    // 数组创建并初始化
    val arr2 = Array("apple", "banana", "orange")

    // 整型数组
    val arr3 = Array(1, 2, 3, 4, 5)


    // 创建一个包含1到9的数组
    val arr4 = Array.range(1, 10)

    // 遍历数组arr4
    for (i <- arr4) {
      println(i)
    }

    // 创建一个包含1到9,步长为2的数组
    val arr5 = Array.range(1, 10, 2)

    for (i <- arr5) {
      println(i)
    }

 ArrayBuffer可变数组

    //    ArrayBuffer

    // 用这个可变数组前要导入
    //    import scala.collection.mutable.ArrayBuffer

    // 创建一个可变数组
    val arr6 = ArrayBuffer[String]()

    //    arr6.append("apple")

    //    val arr7 = ArrayBuffer("apple","banana","orange")

    // += 追加元素
    // += 操作符是在原数组基础上追加的
    arr6 += "apple"

    // 追加多个
    arr6 += ("banana", "orange")

    // ++= 追加一个数组

    // ++=操作符用于将一个可迭代对象(如数组、列表等)
    // 中的所有元素追加到目标可变对象(如可变数组)的末尾。

    // ++=操作的本质是遍历右侧操作数中的每个元素,
    // 并将这些元素逐个添加到左侧的可变对象中,
    // 所以右侧操作数需要是能够被遍历的可迭代对象。
    arr6 ++= Array("pear", "grape")

    // 遍历数组
    for (i <- arr6) {
      println(i)
    }


    // -= 删除指定元素
    arr6 -= "apple"

    // -= 删除一个多个元素
    arr6 -= ("banana", "orange")

    // --= 删除一个数组
    arr6 --= Array("pear", "grape")

    // 遍历数组
    for (i <- arr6) {

      println(i)
    }

    println("\n")

    // 创建一个可变数组
    val arr7 = ArrayBuffer(11, 22, 33, 44, 55, 66)

    // 删除指定下标的元素
    arr7.remove(1)

    for (i <- arr7) {
      println(i)
    }
    println("\n")

    // 删除指定下标和指定长度的元素
    arr7.remove(1, 2)

    for (i <- arr7) {
      println(i)
    }

List 不可变列表

    //    List 列表

    // 创建一个列表
    val list1 = List(1, 2, 3)
    // 创建一个空列表
    val list2 = List()
    // 创建一个包含11到19的列表
    val list3 = List.range(11, 20)
    // 创建一个包含20到29,步长为2的列表
    val list4 = List.range(20, 30, 2)

    // 遍历列表list4
    for (i <- list4) {
      println(i)
    }

    println("\n")

    // ++ 是用于连接两个列表的操作符
    // 将list3中的所有元素追加到list1的末尾,
    // 从而创建一个 新的列表 list5
    val list5 = list1 ++ list3
    for (i <- list5) {
      println(i)
    }

    println("\n")

    // :: 是用于在列表的开头添加元素的操作符
    val list6 = 20 :: list1
    for (i <- list6) {
      println(i)
    }

    println("\n")

    // ::: 是用于连接两个列表的操作符
    // 将list1中的所有元素追加到list2的末尾,
    // 从而创建一个 新的列表 list7
    val list7 = list2 ::: list1
    for (i <- list7) {
      println(i)
    }

ListBuffer 可变列表

    //    ListBuffer 可变列表
    //    要先导入下面
    //    import scala.collection.mutable.ListBuffer

    // 创建一个可变列表
    val list8 = new ListBuffer[String]()

    // += 追加元素
    list8 += "张三"
    // += 追加多个元素
    list8 += ("李四", "王五")
    // ++= 追加一个列表
    list8 ++= List("赵六", "钱七")
    // 遍历
    for (i <- list8) {
      println(i)
    }

    println("\n")

    // -= 删除指定元素
    list8 -= "张三"
    // -= 删除多个元素
    list8 -= ("李四", "王五")
    // --= 删除一个列表
    list8 --= List("赵六", "钱七")
    // 遍历
    for (i <- list8) {
      println(i)
    }

    println("\n")


    // 创建一个可变列表
    val list9 = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    // 删除指定下标的元素
    list9.remove(1)
    // 遍历
    for (i <- list9) {
      println(i)
    }

    println("\n")

    // 删除指定下标和指定长度的元素
    list9.remove(0, 2)
    // 遍历
    for (i <- list9) {
      println(i)
    }

    println("\n")

Set 集合(可变不可变)

    //    Set 集合
    //    会自动实现去重
    //    是无序的

    // 创建一个不可变集合
    val s1 = Set(1, 2, 3, 4, 5)

    for (i <- s1) {
      println(i)
    }

    println("\n")

    // 添加元素,生成一个新的集s2
    val s2 = s1 + 6
    for (i <- s2) {
      println(i)
    }

    println("\n")

    // 判断s2是否包含6,包含7
    val a1 = s2.contains(6)
    val a2 = s2.contains(7)
    println(a1) //true
    println(a2) // false
    println("\n")


    //    Set 可变集合
    //    要导入
    import scala.collection.mutable.Set

    // 创建一个空的可变集合
    val s3 = Set.empty[Int]
    // 添加元素
    s3 += (44, 22, 22, 33) // 会自动实现去重
    for (i <- s3) {
      println(i)
    }

    println("\n")


    val s5 = Set(1, 2, 3, 4, 5)
    // 删除元素
    s5 -= 1
    for (i <- s5) {
      println(i)
    }

    println("\n")

    val b1 = s5.contains(3)
    println(b1) // true
    val b2 = s5.contains(6)
    println(b2) // false

    println("\n")

Map映射(可变不可变)(键值对) 

    //    Map 映射

    //    Map 是一种键值对的集合,其中每个键都是唯一的,每个键都映射到一个值。
    //    Map 的键和值可以是任意类型的对象,但键必须是可哈希的。
    //    Map 是不可变的,但可以通过添加或删除键值对来创建一个新的 Map。
    //    Map 的键值对是通过键来访问的,可以使用键来获取对应的值。
    //    Map 的键值对是无序的,但可以通过键的顺序来访问它们。
    //    Map 的键值对是可变的,可以通过修改键值对来改变 Map 的内容。

    // 创建一个不可变映射
    val map1 = Map("apple" -> 1, "banana" -> 2, "orange" -> 3)
    // 遍历
    for ((k, v) <- map1) { // k 是键,v 是值
      println(k + " : " + v)
    }

    println("\n")

    val c1 = map1.contains("apple")
    println(c1) // true

    println("\n")

    // 创建一个可变映射
    // 要导入
    import scala.collection.mutable.Map

    val map2 = Map("aa"-> 11,"bb"->22,"cc"->33)
    // 添加键值对
    map2 += ("dd" -> 44,"ff"-> 66)

    map2("ee") = 55

    // 遍历
    for ((k, v) <- map2) {
      println(k + " : " + v)
    }

    println("\n")

    // 删除键值对
    map2 -= "aa"
    map2 -= ("ee","cc")
    // 遍历
    for ((k, v) <- map2) {
      println(k + " : " + v)
    }

    println("\n")

    // 获取指定键的值
    val v1 = map2("bb")
    println(v1) // 22

    println("\n")

    // 获取指定键的值,如果不存在则返回默认值
    val v2 = map2.getOrElse("gg", 0)
    println(v2) // 0
    println("\n")

    // 获取所有的键和值,返回一个集合
    val set1 = map2.keys
    val set2 = map2.values

    // 遍历
    for (i <- set1) {
      println(i)
    }

    for (i <- set2) {
      println(i)
    }

    println("\n")

Tuple 元组 

    // Tuple 元组
    //    元组是 Scala 中的一种数据结构,它可以包含多个不同类型的元素,但元组的长度是固定的。
    //    元组中的元素可以通过索引来访问,索引从 1 开始。
    //    元组是不可变的,一旦创建就不能修改。
    //    元组可以用于返回多个值,或者将多个值组合成一个单一的值。
    //    元组可以用于模式匹配,以便从复杂的结构中提取出特定的元素。

    // 创建一个三元组,有三个元素,元组类型为(int,String,double)
    val t1 = (1, "hello", 3.14)

    // 使用下划线_语法 来访问元组中的元素。
    // tuple._n取出元祖的第 n 个元素,第一元素下标为1

    val a = t1._1
    val b = t1._2
    val c = t1._3
    println(a)
    println(b)
    println(c)

    println("\n")

    // 遍历元组
    for (i <- t1.productIterator) {
        println(i)
    }

    // productIterator方法
    // productIterator方法的主要作用是提供一种统一的方式来遍历对象的所有元素,
    // 无论这个对象是元组还是样例类。
    // 它返回一个迭代器,这个迭代器可以用于遍历对象中的所有元素。

    // 可以使用for循环来遍历元组中的所有元素。
    // 可以使用foreach方法来遍历元组中的所有元素。
    // 可以使用map方法来遍历元组中的所有元素,并将每个元素映射到一个新的值。
    // 可以使用filter方法来遍历元组中的所有元素,并返回满足特定条件的元素。
    // 可以使用zip方法来将两个元组中的元素组合成一个新的元组。
    // 可以使用unzip方法来将一个元组中的元素拆分成两个元组。
    // 可以使用flatten方法来将一个元组中的所有元素展开成一个单一的元组。
    // 可以使用fold方法来将一个元组中的所有元素组合成一个单一的值。

    println("\n")

 字符串

    // 字符串
    
    // 可以看成是一个字符数组
    // 字符串是 Scala 中的一种数据类型,它可以包含任意数量的字符。
    // 字符串是不可变的,一旦创建就不能修改。
    // 字符串可以通过索引来访问,索引从 0 开始。
    // 字符串可以通过连接运算符(+)来连接。
    // 字符串可以通过插值运算符(s)来插入变量。
    // 字符串可以通过正则表达式来匹配和替换。
    // 字符串可以通过字符串方法来操作,例如toUpperCase、toLowerCase、substring等。
    // 字符串可以用于表示文本数据,例如文件名、URL、用户名等。
    // 字符串可以用于表示二进制数据,例如图片、音频、视频等。


    val str1 = "hello world"

    // 分割字符串,调用split方法,结果为一个数组
    val arr11 = str1.split(" ") // 按空格分割
    for (i <- arr11) {
      println(i)
    }

    println("\n")

    val str2 = "I love you"

    // 字符串的长度
    val len = str2.length
    println(len)
    println("\n")

    // 字符串的索引
    val cc1 = str2(0)
    println("str2(0)位置是 " + cc1)
    println("\n")

    val cc2 = str2.charAt(4)
    println("str2(4)位置是 " + cc2)

    // 字符串的遍历
    for (i <- str2) {
      println(i)
    }

    println("\n")

    // 字符串的连接
    val str3 = "I " + "love " + "you"
    println(str3)
    println("\n")

    // 字符串的插值
    val name = "Alice"
    val age = 20
    val str4 = s"My name is $name, I am $age years old."
    println(str4)
    println("\n")

    // 字符串的匹配
    val str5 = "hello world"
    val pattern = "hello"
    val result = str5.matches(pattern)
    println(result)
    println("\n")

    // 字符串的替换
    // replace方法,将字符串中的第一次出现的指定字符替换为新的字符
    // replaceAll方法,将字符串中的出现的所有指定字符替换为新的字符,支持正则表达式
    val str6 = "hello world"
    val result1 = str6.replace("hello", "hi")
    val r = str6.replaceAll("world","Scala")
    println("result1的结果是 " + result1)
    println("r的结果是 " + r)
    println("\n")

    // 字符串的截取
    val str7 = "hello world"
    val result2 = str7.substring(0, 5)
    println(result2)
    println("\n")

    // 字符串的转换,全换大写
    val str8 = "hello world"
    val result3 = str8.toUpperCase
    println(result3)
    println("\n")

    // 字符串的转换,全换小写
    val result4 = str8.toLowerCase
    println(result4)
    println("\n")

    // 字符串的反转
    val result5 = str8.reverse
    println(result5)
    println("\n")

    // 字符串的去除空格
    val result6 = str8.trim
    println(result6)
    println("\n")

    // 字符串的首字母大写
    val result7 = str8.capitalize
    println(result7)
    println("\n")

    // 字符串的包含
    val result8 = str8.contains("hello")
    println(result8)
    println("\n")

    // 出现hello的第一个索引位置
    val result9 = str8.indexOf("hello")
    println(result9)
    println("\n")

    // 出现hello的最后一个索引位置
    val result10 = str8.lastIndexOf("hello")
    println(result10)
    println("\n")

    // 字符串是否以hello开头
    val result11 = str8.startsWith("hello")
    println(result11)
    println("\n")

    // 字符串是否以world结束
    val result12 = str8.endsWith("world")
    println(result12)
    println("\n")

    // 字符串是否为空
    val result13 = str8.isEmpty
    println(result13)
    println("\n")

 split("\\s+")解释

val words = sentence.split("\\s+")

在正则表达式中,\\s 表示空白字符,包括空格、制表符(\t)、换行符(\n)等。而 + 是一个量词,表示前面的字符(这里就是空白字符 \\s)可以出现一次或多次。

所以在 sentence.split("\\s+") 这个语句中,是按照一个或多个连续的空白字符来分割字符串 sentence 的。

例如,如果有一个字符串 "Hello World",使用这个表达式分割后,就会得到 ["Hello", "World"] 两个子字符串。

 


http://www.kler.cn/a/577489.html

相关文章:

  • 1. 树莓派上配置机器人环境(具身智能机器人套件)
  • 每日一题-哞叫题(蓝桥杯)【模拟】
  • 国家二级运动员证书有什么用·棒球1号位
  • DeepSeek开源Day4:DualPipeEPLB技术详解
  • STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步
  • React Native v0.78 更新
  • 国产替代新篇章:领麦微红外测温传感器赋能3D打印精准制造
  • Linux安装Anaconda和Jupyter
  • 求最大公约数【C/C++】
  • Ubuntu 下 nginx-1.24.0 源码分析 - conf_ctx
  • 机器学习数学基础:39.样本和隐含和残差协方差矩阵
  • 动态HTTP代理与静态HTTP代理:优缺点详析
  • 浅论数据库聚合:合理使用LambdaQueryWrapper和XML
  • P4268 [USACO18FEB] Directory Traversal G
  • 使用Lua和lua-resty-http-simple库的爬虫程序爬取图片
  • linyu-im
  • 蓝桥杯备赛:一道数学题(练思维(同余的应用))
  • 解决MySQL迁移到达梦数据库报错“字符串截断”的问题
  • Android Studio右上角Gradle 的Task展示不全
  • 《原型链的故事:JavaScript 对象模型的秘密》