scala记录(3)字符串和集合

1字符串

1.1String

1.2StringBuilder 可变

1.3string操作方法举例

  • 比较:equals
  • 比较忽略大小写:equalsIgnoreCase
  • indexOf:如果字符串中有传入的assci码对应的值,返回下标
 /**
     * String && StringBuilder
     */
    val str = "abcd"
    val str1 = "ABCD"
    
    println(str.indexOf(97))
    println(str.indexOf("b"))

    println(str==str1)
    /**
     * compareToIgnoreCase
     * 
     * 如果参数字符串等于此字符串,则返回值 0;
     * 如果此字符串小于字符串参数,则返回一个小于 0 的值;
     * 如果此字符串大于字符串参数,则返回一个大于 0 的值。
     * 
     */
    println(str.compareToIgnoreCase(str1))
    
    val strBuilder = new StringBuilder
    strBuilder.append("abc")
//    strBuilder.+('d')
    strBuilder+ 'd'
//    strBuilder.++=("efg")
    strBuilder++= "efg" 
//    strBuilder.+=('h')
    strBuilder+= 'h' 
    strBuilder.append(1.0)
    strBuilder.append(18f)
    println(strBuilder)

2.集合

2.1数组

2.1.1创建数组

  • new Array[Int](10)

  赋值:arr(0) = xxx

  • Array[String](“s1”,”s2”,”s3”)

2.1.2数组遍历

  • for
  • foreach

2.1.3创建一维数组和二维数组

2.1.4数组中方法举例

  • Array.concate:合并数组
  • Array.fill(5)(“bjsxt”):创建初始值的定长数组

创建两种方式::

  /**
     * 创建数组两种方式:
     * 1.new Array[String](3)
     * 2.直接Array
     */
    
    //创建类型为Int 长度为3的数组
    val arr1 = new Array[Int](3)
    //创建String 类型的数组,直接赋值
    val arr2 = Array[String]("s100","s200","s300")
    //赋值
    arr1(0) = 100
    arr1(1) = 200
    arr1(2) = 300

遍历两种方式:

  /**
     * 遍历两种方式
     */
    for(i <- arr1){
          println(i)
    }
    arr1.foreach(i => {
      println(i)
    })
    
    for(s <- arr2){
      println(s)
    }
    arr2.foreach { 
      x => println(x) 
    }

创建二维数组:

 /**
     * 创建二维数组和遍历
     */
    val arr3 = new Array[Array[String]](3)
    arr3(0)=Array("1","2","3")
    arr3(1)=Array("4","5","6")
    arr3(2)=Array("7","8","9")
    for(i <- 0 until arr3.length){
      for(j <- 0 until arr3(i).length){
        print(arr3(i)(j)+"    ")
      }
      println()
    }
    
    var count = 0
    for(arr <- arr3 ;i <- arr){
      if(count%3 == 0){
        println()
      }
      print(i+"    ")
      count +=1 
    }
    
    arr3.foreach { arr  => {
      arr.foreach { println }
    }}
    
    
    val arr4 = Array[Array[Int]](Array(1,2,3),Array(4,5,6))
    arr4.foreach { arr => {
      arr.foreach(i => {
        println(i)
      })
    }}
    println("-------")
    for(arr <- arr4;i <- arr){
      println(i)
    }

2.2 List

2.2.1创建list

  val list = List(1,2,3,4)

  • Nil长度为0的list

2.2.2 list遍历

  foreach ,for

2.2.3 list方法举例

  • filter:过滤元素
  • count:计算符合条件的元素个数
  • map:对元素操作
  • flatmap :压扁扁平,先map再flat

     //创建
    val list = List(1,2,3,4,5)
    
    //遍历
    list.foreach { x => println(x)}
//    list.foreach { println}
    //filter
    val list1  = list.filter { x => x>3 }
    list1.foreach { println}
    
    //count
    val value = list1.count { x => x>3 }
    println(value)
    
    //map
    val nameList = List(
      "ni hao a",
      "hello scala"
        )
    val mapResult:List[Array[String]] = nameList.map{ x => x.split(" ") }
    mapResult.foreach{x =>{
      x.foreach(println)  
    }}    
    
    //flatmap
    val flatMapResult : List[String] = nameList.flatMap{ x => x.split(" ") }
    flatMapResult.foreach {x =>{
      x.foreach(println)  
    }}

2.3 Set

2.3.1创建set

  注意:set集合会自动去重

2.3.2set遍历

  foreach,for

2.3.3set方法举例

  • 交集:intersect ,&
  • 差集: diff ,&~
  • 子集:subsetOf
  • 最大:max
  • 最小:min
  • 转成数组,toList
  • 转成字符串:mkString(“~”)

2.3.4 set方法总结

 //创建 
    val set1 = Set(1,2,3,4,4)
    val set2 = Set(1,2,5)
    //遍历
    //注意:set会自动去重
    set1.foreach { println}
   for(s <- set1){
      println(s)
    }
    println("*******")
   /**
    * 方法举例
    */
    
   //交集
   val set3 = set1.intersect(set2)
   set3.foreach{println}
   val set4 = set1.&(set2)
   set4.foreach{println}
   println("*******")
   //差集
   set1.diff(set2).foreach { println }
   set1.&~(set2).foreach { println }
   //子集
   set1.subsetOf(set2)
   
   //最大值
   println(set1.max)
   //最小值
   println(set1.min)
   println("****")
   
   //转成数组,list
   set1.toArray.foreach{println}
   println("****")
   set1.toList.foreach{println}
   
   //mkString
   println(set1.mkString)
   println(set1.mkString("	"))

2.4 Map

2.4.1map创建

  • Map(1 –>”bjsxt’)
  • Map((1,”bjsxt”))

注意:创建map时,相同的key被后面的相同的key顶替掉,只保留一个

    val map = Map(
        "1" -> 11,
        2 -> 11,
        (3,"dsasd")
    )

2.4.2 获取map的值

  • map.get(“1”).get
  • map.get(100).getOrElse(“no value”):如果map中没有对应项,赋值为getOrElse传的值。
    println(map.get("1").get)
    println(map.get(6).getOrElse("no this key"))

2.4.3遍历map

  • for,foreach
//map遍历
    for(x <- map){
      println("====key:"+x._1+",value:"+x._2)
    }
    map.foreach(f => {
      println("key:"+ f._1+" ,value:"+f._2)
    })

2.4.4遍历key

  • map.keys
        //遍历key
    val keyIterable = map.keys
    keyIterable.foreach { key => {
      println("key:"+key+", value:"+map.get(key).get)
    } }

2.4.5遍历value

  • map.values
    //遍历value
    val valueIterable = map.values
    valueIterable.foreach { value => {
      println("value: "+ value)
    } }

2.4.6合并map

  • ++  例:map1.++(map2)  --map1中加入map2
  • ++:  例:map1.++:(map2) –map2中加入map1

注意:合并map会将map中的相同key的value替换

    //合并map
    val map1 = Map(
      (1,"a"),    
      (2,"b"),    
      (3,"c")    
    )
    val map2 = Map(
      (1,"aa"),
      (2,"bb"),
      (2,90),
      (4,22),
      (4,"dd")
    )
    map1.++:(map2).foreach(println)

2.4.7 map中的方法举例

  • filter:过滤,留下符合条件的记录
  • count:统计符合条件的记录数
  • contains:map中是否包含某个key
  • exist:符合条件的记录存在不存在
  /**
     * map方法
     */
    //count
    val countResult  = map.count(p => {
      p._2.equals("shsxt")
    })
    println(countResult)
    
    //filter
    map.filter(_._2.equals("shsxt")).foreach(println)
    
    //contains
    println(map.contains(2))
   
    //exist
    println(map.exists(f =>{
      f._2.equals("xasxt")
      
    }))

2.5元组

2.5.1元组定义

与列表一样,与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。

2.5.2创建元组与取值

  • val  tuple = new Tuple(1) 可以使用new
  • val tuple2  = Tuple(1,2) 可以不使用new,也可以直接写成val tuple3 =(1,2,3)
  • 取值用”._XX” 可以获取元组中的值

注意:tuple最多支持22个参数

    //创建,最多支持22个
    val tuple = new Tuple1(1)
    val tuple2 = Tuple2("zhangsan",2)
    val tuple3 = Tuple3(1,2,3)
    val tuple4 = (1,2,3,4)
    val tuple18 = Tuple18(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
    val tuple22 = new Tuple22(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)

    //使用
    println(tuple2._1 + "	"+tuple2._2)
    val t = Tuple2((1,2),("zhangsan","lisi"))
    println(t._1._2)

2.5.3元组的遍历

tuple.productIterator得到迭代器,进而遍历

   //遍历
    val tupleIterator = tuple22.productIterator
    while(tupleIterator.hasNext){
      println(tupleIterator.next())
    }

2.5.4 swap,toString方法

注意:swap元素翻转,只针对二元组

    /**
     * 方法
     */
    //翻转,只针对二元组
    println(tuple2.swap)
    
    //toString
    println(tuple3.toString())
原文地址:https://www.cnblogs.com/kpsmile/p/10374312.html