zoukankan      html  css  js  c++  java
  • 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())
  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10374312.html
Copyright © 2011-2022 走看看