-
可空类型
如果要定义一个变量,并且赋值null,在kotlin中需要这样做,否则编译不过
如果想给空,需要在定义变量的时候,加?号var name2: String ? name2 = null name2?.chars() // 如果name2是null的情况下,chars()是不会被执行的,从而避免空指针异常;如果不加?调用chars()函数,则编译不通过,因为系统判断name2有可能为空
var name2: String ? // name2 = " " name2 = "ssdf" var ans = name2?.let{ if (it.isBlank()) { "Default" } else { it } }
-
断言(用于调试,不能用于生产环境)
var name3: String ? = null name3!!.let { } // 使用断言,不会检测name是否为空,可以编译通过,但是如果name3为空,调用let函数会抛出空指针异常
-
空合并操作符 ?:
val t = name3 ?: "tttt" // 如果变量name3是空,则返回"tttt"否则,返回name3的值给t
-
自定义异常
fun main(args: Array<String>) { try { var info: String? = null checkException(info) } catch (e: Exception) { println("Oops! $e") } } fun checkException(info: String?) { info ?: throw CustomException() } class CustomException : IllegalArgumentException("too bad")
-
字符串截取和解构表达式
val str : String = "Dany is a boy" val substring = str.substring(0 until str.indexOf("is")) println(substring) var str2: String ="Leggy,Harry,Ldeg,Marry,Petty,Scott,Tide" val strings = str2.split(",") val (var1, var2, var3, var4, var5) = strings println("v1:$var1, v2:$var2, v3:$var3, v4:$var4, v5:$var5")
-
replace 函数的使用
val str3 = "Hello World" var newStr3 = str3.replace("o", "t") println(newStr3) val str4 = "Hello World" var newStr4 = str4.replace(Regex("[oW]")) { when(it.value){ "o" -> "g" "W" -> "1" else-> it.value } } println(newStr4)
-
forEach
val str = "ABC" str.forEach { println(it) }
-
字符串转整型
val num = "43".toIntOrNull() println(num)
-
Double 转 Int
val num2 = 23.56.toInt() println(num2) 23.45.roundToInt() // 结果四舍五入 val format = "%.10f".format(23.46) println(format)
-
apply函数
apply {} 始终返回str,且{} 中,没有it,持有this,this 就是 str str.apply { }.apply { }.apply { }
-
listOf 函数 和 let 函数
val list = listOf(1, 2, 3, 4 ,5) val result = list.let { println(it) it.first() + it.first() } println(result)
-
run函数
run 函数将调用它对象作为参数,传递给具名函数或者匿名函数,执行的结果是匿名或者具名函数执行完成后的返回结果,因此可以链式调用。fun main(args: Array<String>) { val str = "DSfy" // 写法1 str.run(::isLong) .run(::showText) .run(::mapText) .run(::println) // 写法2 str.let(::isLong) .let(::showText) .let(::mapText) .let(::println) // 写法3 with(with(with(with(str, ::isLong), ::showText), ::mapText), ::println) } fun isLong(str: String) = str.length > 5 fun showText(isLong: Boolean) = if(isLong) "Text is long" else "Text is short" fun mapText(text: String) = "[ $text ]"
-
also 函数 ,与apply函数的功能基本一样。also的匿名函数中的it与调用also的对象是同一个
fun main(array: Array<String>) { val str = "ABCDEFG" val ans = str.also { println(it) "CDEF" } .also { println(it.length) } println(ans) }
-
takeIf函数:根据匿名函数的返回值true/false决定最终的返回结果,如果是true,则返回调用调用者,false则返回null。一般与 空操作符?:配合使用
fun main(args: Array<String>) { val name = "ABCDEFG" val ans = name.takeIf { false } ?: "you are null" println(ans) }
-
takeUnless 根据匿名函数的返回值true/false决定最终的返回结果,如果是true,则返回null,false则返回调用者本身。与takeIf函数的作用相反
kotlin基本特性
最新推荐文章于 2024-05-11 16:09:20 发布