学习笔记-Kotlin(3)

目录

1.字符串操作

2.数字类型

3.标准函数库

       (1).apply

       (2).let

       (3).run

       (4).with

       (5).also

       (6).takeIf和takeUnless

1.字符串操作

       indexOf():用法跟java相同

       substring():字符串截取。跟java相同,但其中有一种用法是subString(range:Int)

"frenk".substring(0 until 4)

这表示截取0-4,包括0,但不包括4

       split():拆分字符串。与java不同的是返回的是一个List集合,java返回的是String[],kotlin还有一种方法接收,代码:

const val NAME = "jack,wangwang,yujun"
fun splitTest() {
    val (origin, dest) = Names.split(',')
    println("${origin},${dest}")
}

运行结果 :jack,wangwang
       
这种用法origin等于List的第一个,以此类推

       replace():和java用法相同,讲一个不同的方法:第一个参数是正则表达式,第二个参数是匿名函数。

fun replaceTest() {
    val str1 = "The people's Republic of China."
    val str2 = str1.replace(Regex("[aeiou]")) {
        when (it.value) {
            "a" -> "8"
            "e" -> "6"
            "i" -> "9"
            "o" -> "1"
            "u" -> "3"
            else -> it.value
        }
    }
    println(str2)
}

运行结果 :Th6 p61pl6's R6p3bl9c 1f Ch9n8.
       
代码逻辑比较简单,正则中的aeiou字符对应替换成86913。

       字符串比较
       kotlin :
==检查两个字符串的字符是否匹配
       kotlin :
===检查两个字符是否在堆上的同一对象
       java中比较的方法是equals()

       forEach:遍历字符串的每个字符

fun forEachTest() {
    val str = "The people's Republic of China."
    str.forEach {
        print("${it}*")
    }
}

运行结果 :T*h*e* *p*e*o*p*l*e*'*s* *R*e*p*u*b*l*i*c* *o*f* *C*h*i*n*a*.*

2.数字类型

       kotlin提供了toDoubleOrNull,toIntOrNull的安全转化函数,如果转换不了,就返回空。

       Double类型格式化

val s = "$.2f".format(8.956781)

运行结果 :8.96

       Double类型转Int

fun double2Int() {
    //精度损失
    println("损失精度" + 8.956781.toInt())
    //四舍五入
    println("四舍五入" + 8.956781.roundToInt())
}

运行结果 :损失精度8
                   四舍五入9

3.标准函数库

       (1).apply

       可以看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供的lambda给函数执行,它回返回配置好的接收者。

fun standardFunctionApply() {
    //正常使用
    val file1 = File("E://asdasdasdas.txt")
    file1.setReadable(true)
    file1.setWritable(true)
    file1.setExecutable(true)

    //apply使用
    val file2 = File("E://asdasdasdas.txt").apply {
        setWritable(true)
        setExecutable(true)
        setReadable(true)
    }
}

       (2).let

       使某个变量作用于其lambda表达式里,使用it关键字可以进行操作使用。

       let和apply的区别let会把接收者传给lambda,而apply啥都不传。在匿名函数执行完之后,apply返回当前接收者,let会返回lambda最后一行。例如

fun standardFunctionLet() {
    val s = "Frenk".apply {
        this + "22222"
    }
    val l = "Frenk".let {
        it + "1111"
    }
    println("${s}+${l}")
}

运行结果 :Frenk+Frenk1111

       我这样解释不对,但是学apply的时候我第一想法就是我想要改变它的值,那咋改呢。本身apply和let的侧重点就不同。但我想不到更好的例子

       (3).run

       光看作用域,run和apply差不多,但不同的是run函数不返回接收者,返回的是lambda结果。这一点和let是相同的。此外run还可以用于引用函数。举个引用函数的例子:

val s = "Frenk".run(::isTooLong)

这样s的值就是isTooLong的返回值了,当然run中还可以进行一些复杂操作

       (4).with

       with是run的变体,功能一样的,调用不同,调用with需要值参为第一个参数传入。

fun standardFunctionWith() {
    val isTooLong = with("The people's Republic of China"){
        length >= 10
    }
    println(isTooLong)
}

运行结果 :true

       (5).also

       和let功能相似,不同点在于返回。also返回接收者,let返回lambda结果。这点和apply相似。also适合针对同一原始对象。

       (6).takeIf和takeUnless

        takeIf:判断lambda中的条件表达式,true的话返回接收者对象,false返回空

        takeUnless:与takeIf相反。true返回空,false返回接收者对象

fun standardFunctionTakeIf() {
    var s = getStr().takeIf { it != null }
    println(s)

    var l = getStr().takeUnless { it == null }
    println(l)
}

fun getStr():String? = "111"

运行结果 :111
                   111

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值