Kotlin sustring,split,replace,==与===

384 阅读1分钟

Kotlin中的substring操作

  • 概述:大体与 Java相同,但KT中倾向于将逗号换成until

  • 代码

     const val INFO = "abcdefg"
     fun main(){
         var index = INFO.indexOf('d')
         println(INFO.substring(0 , index))
         println(INFO.substring(0 until index))
     }
    
  • 运行截图:

    image-20220521203840379

Kotlin 中的split操作

  • 概述:

    • 根据指定字符串对原有字符串进行分割
    • 综合C++ 中的解构操作
  • 代码:

     fun main(){
         var string = "value1,value2,value3,value4"
         var list = string.split(",")
     ​
         println("直接输出list  $list")
     ​
         var (v1,v2,v3,v4) = list
         println("综合C++解构操作,v1:$v1,v2:$v2,v3:$v3,v4:$v4")
     }
    
  • 运行截图:

    image-20220521204531696

Kotlin 中的replace操作

  • 概述:对原始字符串进行混淆

    • 根据正则表达式+when进行混淆
  • 代码:

     fun main(){
         var pwd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
         println("原始密码为 $pwd")
     ​
         var pwdNew = pwd.replace(Regex("[AKMNQ]")){
             when (it.value){
                 "A" -> "1"
                 "K" -> "2"
                 "M" -> "3"
                 "N" -> "4"
                 "Q" -> "5"
                 else -> it.value
             }
         }
         println("混淆后的密码为 $pwdNew")
     ​
         var pwdSource = pwdNew.replace(Regex("[12345]")){
             when (it.value){
                 "1" -> "A"
                 "2" -> "K"
                 "3" -> "M"
                 "4" -> "N"
                 "5" -> "Q"
                 else -> it.value
             }
         }
         println("逆混淆后的密码为 $pwdSource")
     }
    
  • 运行截图:

    image-20220521210103548

Kotlin中的 == 与 ===

  • 概述:

    • ==:相当于Java中的equals,比较的是字面量
    • ===:相当于Java中的hashCode,比较的是引用
    • 同时需要注意,在Kotlin中同样存在字符串常量池
  • 代码:

     fun main(){
         val name1 = "Wasbry"
         val name2 = "Wasbry"
         val name3 = "wa"
     ​
     ​
         println("测试 == ,相当于Java中的equals,比较的是字面量")
         println(name1 == name2)
         println(name1.equals(name2))
     ​
         println("测试 ===,相当于Java中的hashCode,比较的是引用")
     ​
         //再次比较
         val name4 = "wasbry".capitalize()
         println(name1 === name4)
     }
    
  • 运行截图:

    图片.png

Kotlin中字符串的遍历

  • 概述:采用forEach

    • 内部持有调用者的引用,it
    • 这个是可以进行覆盖的
  • 代码:

     package step3
     ​
     fun main(){
         val str = "ABCDE"
         val str1 = "ABCDE"
     ​
         str.forEach {
             print("取出单个字符:$it")
         }
         println()
         str1.forEach {C->
             print("取出单个字符:$C")
         }
     }
    
  • 运行截图:

    图片.png