Kotlin笔记(二)

字符串操作

const val NAME = "Kevin's friend"
const val NAME_ARR = "Kevin,Jack,Lily"
const val CHINA = "The People's Republic of China"
fun main() {
    //截取Kevin
    val index = NAME.indexOf("\'")
    println(NAME.substring(0, index))
    println(NAME.substring(0 until index))
    //字符串分割
    println(NAME_ARR.split(","))
    //解构语法
    val (a, b, c) = NAME_ARR.split(",")
    println("a的名字是${a},b的名字是${b},c的名字是${c}")
    //配合when进行字符替换
    val china2 = CHINA.replace(Regex("[aeiou]")) {
        when(it.value) {
            "a" -> "1"
            "e" -> "2"
            "i" -> "3"
            "o" -> "4"
            "u" -> "5"
            else -> it.value
        }
    }
    println(china2)
    //比较 ==为比较相同字符串  ===为比较相同内存对象
    val str1 = "Kevin"
    val str2 = "Kevin"
    println(str1 == str2)
    println(str1 === str2)
    val s1 = "Kevin"
    val s2 = "kevin".capitalize()
    println(s1 == s2)
    println(s1 === s2)
    val sb1 = StringBuilder("1")
    val sb2 = sb1
    println(sb1 == sb2)
    println(sb1 === sb2)
    //遍历
    CHINA.forEach {
        println(it)
    }
    //转换失败抛异常NumberFormatException
//    println("9.99".toInt())
    //转换失败返回null
    println("9.99".toIntOrNull())
    //精度损失
    println(9.99.toInt())
    //四舍五入
    println(9.99.roundToInt())
    //格式化(保留小数点后两位,末尾采取四舍五入)
    val p = "%.2f".format(3.1415926)
    println(p)
}

apply,let,run,also

fun main() {
    //apply方法中this代表当前对象,可以通过隐式调用this操作该对象,并返回该对象
    val book = Book().apply {
        name = "apply"
        page = 10
        changeName("apply apply")
    }
    println(book.name)
    println(book.page)
    //let方法中it代表当前对象,需要通过it显式调用操作该对象,最后一行表示返回的对象
    val book2 = Book().let {
        it.name = "let"
        it.page = 20
        it.changeName("let let")
        it
    }
    println(book2.name)
    println(book2.page)
    //run方法和apply一样传入隐式的this,和let一样最后一行表示返回的对象
    val book3 = Book().run {
        name = "run"
        page = 30
        changeName("run run")
        this
    }
    println(book3.name)
    println(book3.page)
    //run通过函数引用实现链式调用,下一个方法的入参是上一个方法的出参
    "12345678910".run(::checkMax).run(::getMessage).run(::println)
    //with方法和run方法相同,不过调用者要作为入参放入后面括号中(with方法不常用)
    val book4 = with(Book()){
        name = "with"
        page = 40
        changeName("with with")
        this
    }
    println(book4.name)
    println(book4.page)
    //also和let一样传入需要显示调用的it作为当前对象,和apply一样直接返回该对象
    val book5 = Book().also {
        it.name = "also"
    }.also {
        it.page = 50
    }.also {
        it.changeName("also also")
    }
    println(book5.name)
    println(book5.page)
}

private fun checkMax(str:String) : Boolean {
    return str.length > 10
}

private fun getMessage(isMax:Boolean) : String {
    return if (isMax) {
        "is max"
    } else {
        "not max"
    }
}

private class Book {
    var name:String? = null
    var page:Int? = null

    fun changeName(name:String) {
        this.name = name
    }
}

takeIf,takeUnless

fun main() {
    val str = "aaa"
    //takeIf方法表示判断方法体中的条件是否满足,若满足则返回该对象进行接下来的操作,若不满足则返回null
    val res = str.takeIf {
        it == "aaa"
    }?.replace("a", "b")
    println(res)
    //takeUnless和takeIf刚好相反,不满足条件返回该对象,满足返回null
    val res2 = str.takeUnless {
        it == "aaa"
    }?.replace("a", "b")
    println(res2)
}

集合创建

fun main() {
    //创建不可变的集合
    val list = listOf("AAA", "BBB", "CCC")
    //安全索引函数
    //getOrElse方法表示若下标越界则返回方法体中的结果
    println(list.getOrElse(3){"DDD"})
    //getOrNull方法表示若下标越界返回空
    println(list.getOrNull(3) ?: "DDD")

    //创建可变的集合
    val list2 = mutableListOf<String>()
    list2.add("AAA")
    list2.add("BBB")
    list2.add("CCC")
    println(list2.toString())
    list2.removeAt(1)
    list2.remove("CCC")
    println(list2.toString())

    //可变集合与不可变集合的转换
    val list3 = list2.toList()
    println(list3.toString())
    val list4 = list.toMutableList()
    println(list4.toString())
}

集合操作

fun main() {
    val list = mutableListOf<String>()
    //源码中通过运算符重载添加和移除元素
    list += "AAA"
    list += "BBB"
    list += "CCC"
    list += "DDD"
    println(list.toString())
    list -= "AAA"
    println(list.toString())
    //removeIf通过条件删除元素
    list.removeIf{
        it == "CCC"
    }
    println(list.toString())
    //集合遍历
    for (s in list) {
        println(s)
    }
    list.forEach {
        println(it)
    }
    list.forEachIndexed { index, s ->
        println("[${index},${s}]")
    }
    //集合的解构语法
    val list2 = listOf("1", "2", "3")
    val (a, b, c) = list2
    println("a=${a},b=${b},c=${c}")
    //下划线表示跳过解构此下标的元素,编译码中也会跳过,提高性能
    val (e, _, f) = list2
    println("e=${e},f=${f}")
}

Set集合

fun main() {
    //不能重复集合set和list基本一样
    val set = setOf("1", "2", "3")
    println(set.elementAtOrElse(3){"4"})
    println(set.elementAtOrNull(3) ?: "4")

    val set2 = mutableSetOf<String>()
    set2 += "1"
    set2 += "2"
    set2 += "3"
    set2.remove("1")
    set2.forEachIndexed { index, s ->
        println("[${index},${s}]")
    }
}

集合去重

fun main() {
    val list = listOf("AAA", "BBB", "CCC", "CCC", "BBB")
    //list集合去重,先转set再转回list
    val list2 = list.toSet().toList()
    list2.forEach {
        println(it)
    }
    //提供快捷去重api
    val list3 = list.distinct()
    list3.forEach {
        println(it)
    }
}

数组

fun main() {
    //创建int类型的数组
    val intArr = intArrayOf(1, 2, 3)
    //集合转数组
    val intArr2 = listOf(1, 2, 3).toIntArray()
    //创建对象数组
    val peopleArr = arrayOf(People("小明", 23), People("小方", 20), People("小强", 28))
    intArr.forEach {
        println(it)
    }
    intArr2.forEach {
        println(it)
    }
    peopleArr.forEach {
        println(it.toString())
    }
}

private class People(private var name: String?, private var age: Int?) {

    override fun toString(): String {
        return "姓名:${name},年龄:$age"
    }
}

Map集合

fun main() {
    //map的创建实则是传入Pair对象,to方法生成该对象
    val map1 = mapOf("Kevin" to 22, "Json" to 25)
    println(map1)
    val map2 = mapOf(Pair("Kevin", 22), Pair("Json", 25))
    println(map2)

    //map根据key获取value
    //为空不会抛出异常直接返回null
    println(map2["Kevin"])
    //为空抛出异常
    println(map2.getValue("Kevin"))
    //为空返回后面的对象(可以不为value的类型)
    println(map2.getOrElse("Rose"){"未知年龄"})
    //为空返回value的默认值(必须是value的类型)
    println(map2.getOrDefault("Rose", 0))

    //map的遍历
    map2.forEach {
        println("key = ${it.key}, value = ${it.value}")
    }
    map2.forEach{(a:String, b:Int) ->
        println("key = $a, value = $b")
    }

    //可变map操作方式
    val map3 = mutableMapOf<String, Int>()
    map3 += "Kevin" to 22
    map3["Json"] = 25
    //getOrPut方法获取为空的情况添加一条进去
    println(map3.getOrPut("Rose"){28})
    println(map3)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值