【Kotlin 初学者】字符串常用操作汇总(下)

简介: 五、字符串比较六、字符串查找七、字符串验证八、大杂烩

五、字符串比较


       在Kotlin中,用 == 检查两个字符串中的字符是否匹配,用 === 检查两个变量是否指向内存堆上同一对象,而在Java中 == 做引用比较,做内容比较时用equals方法。

=====


    //字符串比较
    val str1 = "Kotlin"
    val str2 = "Kotlin"
    val str3 = "kotlin".replace("k","K")
    println("$str1-$str2-$str3")
    //比较的是内容,true
    println(str1 == str2)//true
    println(str1 == str3)//true
    //这里为什么是true,字符串内容不可变,Java和Kotlin有个字符串常量池
    println(str1 === str2)//true
    println(str1 === str3)//false


常量池:是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。

String类也是Java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术。


equals


    val str1 = "Kotlin"
    val str2 = "Kotlin"
    val str4 = "kotlin"
    println(str1.equals(str2))//true
    println(str1.equals(str4))//false
    //第二个参数加true代表忽略大小写比较。
    //第二个参数加false代表不忽略大小写比较。
    println(str1.equals(str4,true))//true


六、字符串查找


6.1 获取第一个元素


6.1.1 first()函数和first{}函数


    var seek = "Write better Android apps faster with Kotlin."
    println(seek.first())
    //查找等于某一个字符的第一个元素
    var data = seek.first {
        it == 'A'
    }
    println(data)


在这里介绍一下firstOrNull()函数firstOrNull{}函数


  • 如果字符串为空串时,first()函数会抛出异常,而firstOrNull()函数会返回null。


  • 如果字符串为空串时,first{}函数会抛出异常,而firstOrNull{}函数会返回null


6.1.2 firstOrNull()函数和firstOrNull{}函数


    seek = ""
    //报错:NoSuchElementException: Char sequence is empty.
//    println(seek.first())
    println(seek.firstOrNull())//null
    //如果字符串为空串或字符串内没有该字符,则返回null
    var foN= seek.firstOrNull {
        it == 'N'
    }
    println(foN)//null
    seek = "Note"
    //满足条件返回:char=N
    foN= seek.firstOrNull {
        it == 'N'
    }
    println(foN)//N


6.2 获取最后一个元素


    seek = "Note"
    println(seek.last())//e
    var la = seek.last {
        it == 't'
    }
    println(la)//t


lastOrNull()firstOrNull()类似。lastOrNull{}firstOrNull{}类似。


6.3 查找元素


  • indexOf() : 查找某一个元素或字符串在原字符串中第一次出现的下标。


  • indexOfFirst{}: 同indexOf()。


  • lastIndexOf(): 查找某一个元素或字符串在原字符串中最后一次出现的下标。


  • indexOfLast{}: 同lastIndexOf()。


    val cz = "Android|Java|Kotlin"
    //查找i在cz中第一次出现的下标。
    println(cz.indexOf('i'))//5
    println(cz.indexOf("i"))//5
    //从第10位开始,查找i在cz中第一次出现的下标。
    println(cz.indexOf("i", 10))//17
    var z = cz.indexOfFirst {
        it == 'i'
    }
    println(z)//5
    //查找i在cz中最后一次出现的下标。
    println(cz.lastIndexOf('i'))//17
    println(cz.lastIndexOf("i"))//17
    //从第10位开始,查找i在cz中第一次出现的下标。
    println(cz.lastIndexOf("i", 10))//5
    z = cz.indexOfLast {
        it == 'i'
    }
    println(z)//17


七、字符串验证


       在实际的开发中,特别是Android开发中,会经常遇到验证输入框的内容是否为空串的时候。


       下列几个函数都是处理字符串为空串或为空的:


  • isEmpty(): 其源码是判断其length是等于0,若等于0则返回true,反之返回false。不能直接用于可空的字符串


  • isNotEmpty(): 其源码是判断其length是否大于0,若大于0则返回true,反之返回false。不能直接用于可空的字符串


  • isNullOrEmpty(): 其源码是判断该字符串是否为null或者其length是否等于0。


  • isBlank(): 其源码是判断其length是否等于0,或者判断其包含的空格数是否等于当前的length。不能直接用于可空的字符串


  • isNotBlank(): 其源码是对isBlank()函数取反。不能直接用于可空的字符串


  • isNotOrBlank(): 其源码判断该字符串是否为null。或者调用isBlank()函数


    var verification = ""
    println(verification)
    println(verification.isEmpty())//true
    println(verification.isNotEmpty())//false
    println(verification.isNullOrEmpty())//true
    println(verification.isBlank())//true
    println(verification.isNotBlank())//false
    println(verification.isNullOrBlank())//true
    verification = "Kotlin"
    println(verification)
    println(verification.isEmpty())//false
    println(verification.isNotEmpty())//true
    println(verification.isNullOrEmpty())//false
    println(verification.isBlank())//false
    println(verification.isNotBlank())//true
    println(verification.isNullOrBlank())//false


八、大杂烩


8.1 字符串拼接


  • 使用+
  • 使用plus()函数


    var name = "ShuaiCi "
    //字符串拼接
    println(name + "回笼早觉艺术家")//ShuaiCi 回笼早觉艺术家
    println(name.plus("无所谓最佳男主角"))//ShuaiCi 无所谓最佳男主角
    println(name.plus(12.5))//ShuaiCi 12.5


8.2 字符串长度获取


  • 直接用length属性获取长度
  • 用count()函数获取,其实count()函数的做法也是返回了length长度。


    var name = "ShuaiCi "
    //字符串长度
    println(name.length)//8
    println(name.count())//8


8.3 统计重复字符


  • count()函数,是返回了length属性获取字符串的长度。
  • count{}高阶函数,用于统计字符串中重复某个字符的个数。


    var name = "ShuaiCi "
    //在name中有2个i
    var coun = name.count {
        it == 'i'
    }
    println(coun)//2


8.4 字符串反转


       使用reversed()函数可以将字符串的元素反转。


1.    println(name)//ShuaiCi 
    println(name.reversed())// iCiauhS



8.5 判断字符串的起始与结尾


8.5.1 起始:startsWith()


       判断其字符串是否由某一个字符或字符串起始。


    var name = "ShuaiCi "
    println(name.startsWith('S'))//true
    println(name.startsWith("Shuai"))//true
    println(name.startsWith("Ci"))//false
    println(name.get(5))//C
    //当起始位置为5时,是否由字符串`Ci`起始
    println(name.startsWith("Ci", 5))//true


8.5.2 结尾:endsWith()


       判断其字符串是否由某一个字符或字符串结尾。


1.    var name = "ShuaiCi "
    println(name.endsWith(' '))//true
    println(name.endsWith("Shuai"))//false
    println(name.endsWith("Ci "))//true


8.6 去空格


       使用trim()函数返回一个字符串,其值为该字符串,删除了任何前导和尾随空格。


    name = "     ShuaiCi     "
    println(name)//     ShuaiCi
    println(name.trim())//ShuaiCi
    var cun = name.trim {
        it == ' '
    }
    println(cun)//ShuaiCi


8.7 字符串模板


  • 模板支持在字符串的引号内放入变量值。
  • 字符串内嵌表达式。


1.    name = "Shuaici"
    val age = 18
    val money = 1.25f
    //引号内放入变量值
    //Shuaici 今年 18 ,身上带了 1.25 巨款
    println("$name 今年 $age ,身上带了 $money 巨款")
    val isMan = true
    //添加表达式
    //Shuaici 是个 纯爷们
    println("$name 是个 ${if (isMan) "纯爷们" else "萌妹子"}")


8.8 字符串遍历


    name = "Shuaici"
    name.forEach {
        print("$it|")
    }


微信图片_20220524223330.png


8.9 字符串类型转换


    var str = "12.5"
    //使用toFloatOrNull,当str为null或空串时返回null
    //使用toFloat,str为null或空串时报错:NumberFormatException
    println(str.toFloatOrNull())//12.5
    str= ""
    println(str.toFloatOrNull())//null
//    println(str.toFloat())//NumberFormatException
    var i = true
    println(i.toString())//true


其他引用类型转换类似。


微信图片_20220524223454.png

相关文章
|
4月前
|
Kotlin 索引
Kotlin中的字符串基本操作
Kotlin中的字符串基本操作
231 3
|
4月前
|
存储 Kotlin
Kotlin中布尔类型、字符类型、字符串类型和数组类型
Kotlin中布尔类型、字符类型、字符串类型和数组类型
|
2月前
|
存储 Java Kotlin
Kotlin 字符串教程:深入理解与使用技巧
Kotlin中的字符串用于存储文本,定义时使用双引号包围字符序列,如`var greeting = "Hello"`。Kotlin能自动推断变量类型,但在未初始化时需显式指定类型,如`var name: String`。可通过索引访问字符串元素,如`txt[0]`获取首字符。字符串作为对象,拥有属性和方法,如`length`获取长度,`toUpperCase()`转大写。可使用`compareTo()`比较字符串,`indexOf()`查找子串位置。字符串中嵌入单引号表示文本内的引号,如`"It's alright"`。使用`+`或`plus()
31 3
|
2月前
|
安全 Java Android开发
Kotlin字符串秘籍:解锁高效处理与创意应用,让你的代码闪耀不凡!
【8月更文挑战第2天】Kotlin是一门现代化的静态类型语言,以简洁、安全及强互操作性著称,在Android及服务器端开发中广受好评。本文通过与其他语言对比,深入解析Kotlin中字符串的基础和高级用法。Kotlin简化了字符串拼接,支持直接使用`+`操作符,并引入了直观的字符串模板。它提供了丰富的字符串操作函数,如使用索引范围进行子字符串提取,增强了代码的可读性。Kotlin字符串的不可变性提升了程序稳定性。利用扩展函数特性,可以轻松定制字符串行为,提高代码的模块化和重用性。掌握这些技巧能显著提升开发效率和代码质量。
30 1
|
11月前
|
编译器 C++ Kotlin
【Kotlin】基础速览(1):操作符 | 内建类型 | 类型转换 | 字符串模板 | 可变 var 和不可变 val
【Kotlin】基础速览(1):操作符 | 内建类型 | 类型转换 | 字符串模板 | 可变 var 和不可变 val
62 0
|
5月前
|
存储 安全 Java
《Kotlin核心编程》笔记:val 和 var & 字符串
《Kotlin核心编程》笔记:val 和 var & 字符串
69 0
|
XML 前端开发 安全
kotlin使用spring mvc将接收的字符串生成二维码并响应
使用kotlin制作一个基于`spring mvc`的小demo:接收请求中的字符串参数,用`zxing`将字符串生成出一个二维码,再返回给前端。可以通过此例来了解kotlin与spring的搭配
253 1
|
Java Kotlin 索引
【Kotlin 初学者】字符串常用操作汇总(上)
一、字符串创建 1.1 字符串属性 1.2 字符串函数 二、字符串截取 三、字符串分割 四、字符串替换
825 0
【Kotlin 初学者】字符串常用操作汇总(上)
|
Java Android开发 图形学
Android修行手册之Kotlin-【变量和常量】、【基础类型】、【字符串】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
219 0
|
22天前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
45 1
下一篇
无影云桌面