kotlin基本语法<二> [字符串、标准函数库、list与set、循环与集合转换]

字符串

转义字符串
函数 描述
\t tab键
\b 回退键
\n 换行
\r 回车
\" 双引号
\' 单引号
\\ 反斜杠
\$ 美元符号
\u unicode字符
字符串
// 使用substring 截取字符串
  fun placeOrder(){
        val TAVERN_NAME = "Taernyl's Foolly"
        val indexOfApostorephe = TAVERN_NAME.indexOf('\'')
        val travernMaster = TAVERN_NAME.substring(0 until indexOfApostorephe)
        println("madrigal speak with $travernMaster")
    }

    placeOrder()

  //使用split 分割字符串
    fun splitOrder(){
        val order = "shandy,drangon's breath ,5.91"
        val data = order.split(',')  // data为list类型

        println("type:${data[0]} name:${data[1]} price:${data[2]}")

        //结构赋值
        val(type , name , price) = order.split(',')
        println("type:$type name:$name price:$price")

    }
    splitOrder()

// replace 普通替换 与正则替换

 // 使用replace 替换字符串
    fun replaceStr(name:String) : String{
        return name.replace('a','b');
    }

    // 使用relpace 正则替换
    fun replaceStrReg(name:String) :String {
         return name.replace(Regex("[a]")){
            when(it.value){
                "a" -> "b"
                else -> it.value
            }
        };
    }
    println(replaceStr("aabbcc123"))
    println(replaceStrReg("aabbcc123"))

//字符串比较与遍历

 //字符串比较
    var name1 = "aaa"
    var name2 = "aaa"
    println(name1 == name2)  //值比较      true
    println(name1 === name2) // 内存地址比较  true

    var c = String(listOf('a', 'b').toCharArray())
    var d = "ab"
    println("c=$c d=$d c===d ${c === d}") // 内存地址比较  false

    //unicode
    println("unicode:" + '\u0950')

    //遍历字符串
    "bhb".forEach {
        println(it)
    }

// string int double 转换

//string转数值类型
    val gold = "1.1".toDouble();
    println(gold)

    // int 转  double
    val money = 99 ;
    var intmoney = 99/100 ;
    var floatmoney = 99/100.0 ;
    println(" $intmoney   $floatmoney")

    //double 格式化
    var doubleMoney = 1.111112222333
    var formatMoney = "%.2f".format(doubleMoney)
    println("$doubleMoney    $formatMoney")

    //double 转 int
    var doubleMoney2 = 1.9911112222333
    println(doubleMoney2.roundToInt()) //四舍五入
    println(doubleMoney2.toInt()) //上取整

标准函数库

函数 是否传receiver值给lambda 是否有相关作用域 返回
let lambda结果
apply 接收者对象
run lambda结果
with lambda结果
also 接收者对象
takeIf 可空类型接收者对象
takeUnless 可空类型接收者对象

标准函数库 apply run with let also takeIf takeUnless

list 与 set

只读List 可变 MutableList MutableList的函数
函数 描述
[index]= 设置指定位置的值 越界会抛出异常
add 在列表尾部添加元素
add(index,value) 在指定位置添加元素
addall 向列表中添加同一类型列表中的全部元素
+= 添加一个新元素或者新集合到列表中
-= 删除列表中某个元素或从列表中删除集合所列元素
clear 删除所有元素
removeeIf 基于lambda表达式指定的条件删除元素

list基本用法

  //创建list 并赋初始值     中间<>称为泛型 限制了类型
    var  patronList:List = listOf("aa","bb","cc")
    println(patronList)   // [aa, bb, cc]


    // 获取list元素

    println("${patronList[0]}  ${patronList[1]} ${patronList[2]}" )


    // 超出角标会抛出异常
//    patronList[4]    ArrayIndexOutOfBoundsException

    // 越界取值 getOrElse
    println(patronList.getOrElse(4){"default 4"})

    // getOrNull
    println(patronList.getOrNull(4)?:"default null 4")


    // 判断list 是否包含某个值 contains

    println("list is contain aa ${patronList.contains("aa")}")
    println("list is contain dd ${patronList.contains("dd")}")

    //判断list 是否包含list
    println("list is contain aa bb ${patronList.containsAll(listOf("aa","bb"))}")
    println("list is contain aa cc ${patronList.containsAll(listOf("aa","cc"))}")
    println("list is contain aa dd ${patronList.containsAll(listOf("aa","dd"))}")

    // 删除、添加、修改  list创建的是只读列表  不能修改
    // 需要可变列表可以使用  mutableListOf
    var  mutableList  = mutableListOf("aa","bb","cc")
    mutableList.add("dd")
    mutableList.remove("aa")
    mutableList.remove("ee")
    mutableList.add(0 , "oo")
    mutableList[3] = "33"
    println(mutableList)


//遍历
    for (item in mutableList){
        println("in 遍历 $item")
    }

    mutableList.forEach {
        println("each 遍历 $it")
    }

    // 遍历每一个元素的值和位置
    mutableList.forEachIndexed { index, s ->
        println("$s you are in $index")
     }

    //解构  把list元素内的值 依次赋值给对应位置的变量
    var (name1,name2,name3)  =  listOf("aa","bb","cc")
    println("name1=$name1")
    // 随机排列
    var menuList = listOf("aa","bb","cc")
    println("random first ==  ${menuList.shuffled().first()}" )
只读set 可变 MutableSet MutableSet的函数
函数 描述
add 添加元素
addAll 添加另一个集合中的所有元素
+= 添加一个或多个元素
-= 删除一个或多个元素
remove 删除某个元素
removeAll 删除另一个集合中的所有元素
clear 删除所有元素

// set集合

 // set会自动去重
    val planets = setOf("aa","bb","cc","aa","bb","cc"  )
    println(planets)

    //是否包含某个值
    println(planets.contains("aa"))

    // 获取set的 第三个元素
    println(planets.elementAt(2))


    // set只读  需要可以改变的set可以使用 mutableSetOf
    val addSet = mutableSetOf("aa" , "bb" , "cc")

    println(addSet)
    addSet += "dd"
    println(addSet)

//while 循环与 break

 //数组随机排列取第一个元素   如果满足条件就使用break提前结束  最多循环3次
    var namelist = listOf( "aa","bb","cc","dd","ee")
    var orderCount = 0 ;
    var targetName :String? = null
    while (orderCount < 3){
        orderCount++
        var name = namelist.shuffled().first()
        if(name == "ee"){
            targetName = name
            break
        }
    }
    println("遍历了$orderCount 次 最终找到了name: $targetName")

// 集合转换

 // 使用toSet与toList函数  或者toMutableList 和 toMutableSet   可以实现list 和set 的相互转换
    // 一个小技巧:  调用toSet去掉list集合里的重复元素

    var changeSet  = listOf("aa","bb","cc","aa").toSet()
    println(changeSet)
    var changeList = changeSet.toList()
    println(changeList)

    //kotlin封装了函数 distinct   先调用toSet在调用toList
    var parotns = listOf("aa","bb","cc","aa").distinct()
    println(parotns)
    println(parotns[0])

//数组类型

// kotlin 本身不建议使用 但是如果需要调用一个java方法  java方法的入参是一个数组类型
    val ages = intArrayOf(1,2,3,4,5)
数组类型 创建函数
IntArray intArrayOf
DoubleArray doubleArrayOf
LongArray longArrayOf
ShortArray shortArrayOf
ByteArray byteArrayOf
FloatArray floatArrayOf
BooleanArray booleanArrayOf
Array object arrayOf

你可能感兴趣的:(kotlin基本语法<二> [字符串、标准函数库、list与set、循环与集合转换])