在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了。对Kotlin中的数据类型不清楚的同学。请参考Kotlin——初级篇(三):数据类型详解这篇文章。
在这篇文章中,会对字符串(String)的常用操作做出一个讲解。比如,字符串的截取、查找、获取长度、替换等等...
字符串查找功能在实际开发中,只会用到几个简单的函数,这里我只说明几个常用的。
1.1、获取第一个元素 val str = "kotlin very good" str.first() <=> str[0] <=> str.get(0)其还实现了查找等于某一个字符的第一个元素,即first{}高阶函数
val str = "kotlin very good" // 如果未查找到满足条件的元素,会抛出NoSuchElementException异常 str.first{ it == 'o' }还有一个firstOrNull()函数,它和first()函数的区别在于如果字符串为空串时,first()函数会抛出异常,而firstOrNull()函数会返回null。当然还有firstOrNull{}函数,它和first{}函数的区别在于如果字符串为空串时,first{}函数会抛出异常,而firstOrNull{}函数会返回null
1.2、 获取最后一个元素 val str = ... str.last() <==> str.get(lastIndex) <==> str[lastIndex] 其中 lastIndex 是一个拓展属性,其实现是 length - 1同时还实现了查找等于某一个字符的最后一个元素,即last{}高阶函数
val str = "kotlin very good" // 如果未查找到满足条件的元素,会抛出NoSuchElementException异常 str.last{ it == 'o' } // 其实从源码中我们发现其是对原字符串反转之后再进行遍历查找满足条件的元素。lastOrNull()同firstOrNUll()一样。lastOrNull{}同firstOrNUll{}一样。
1.3、查找元素其实查找元素提供了两个高阶函数find{}、findLast{}。不过他们都是对firstOrNull()或lastOrNull()函数进行处理。这里不多作累述。
1.3、 查找对应元素的下标这里提供查找对应元素下标的几个函数:
indexOf() : 查找某一个元素或字符串在原字符串中第一次出现的下标。
indexLastOf() : 查找某一个元素或字符串在原字符串中最后一次出现的下标。
indexOfFirst{} : 同indexOf()
indexOfLast{} : 同indexLastOf()
例:
println(str.indexOfFirst { it == 'o' }) println(str.indexOfLast { it == 'o' }) println(str.indexOf('o',0)) println(str.indexOf("very",0)) println(str.lastIndexOf('o')) println(str.lastIndexOf("good"))输出结果为:
1 14 1 7 14 12 二、字符串截取如果你有Java或者其他语言的编程基础。相信您对字符串的截取应该不会陌生。您可以继续的往下看,就当作是对字符串截取只是的一个巩固。当然,您也可以直接的跳过本节内容,因为在Kotlin中,字符串的截取的函数subString()是调用了Java中的subString()函数。
在Kotlin中除了调用subString()函数外,还可以调用subSequence()函数,有兴趣的朋友可以去看看源码。
2.1、 用subString()函数截取我们看一看subString()函数的源码
@kotlin.internal.InlineOnly public inline fun String.substring(startIndex: Int): String = (this as java.lang.String).substring(startIndex) @kotlin.internal.InlineOnly public inline fun String.substring(startIndex: Int, endIndex: Int): String = (this as java.lang.String).substring(startIndex, endIndex) public fun String.substring(range: IntRange): String = substring(range.start, range.endInclusive + 1)从以上的源码中我们可以看出,Kotlin中是使用了Java中的subString()函数
其中:
startIndex参数:截取字符串的开始下标
endIndex参数:截取字符串的结束下标
rang参数,是指一个IntRang类型
实例:
val str = "Kotlin is a very good programming language" println("s = ${str.substring(10)}") // 当只有开始下标时,结束下标为length - 1 println(str.substring(0,15)) println(str.substring(IntRange(0,15)))输出结果为:
a very good programming language Kotlin is a ver Kotlin is a very注意:
使用subString(startIndex,endIndex)和subString(rang)时的区别。可以从上边的结果结合源码可以看出来。
切记下标越界的情况。即StringIndexOutOfBoundsException异常
2.2、用subSequence()函数截取在Kotlin中除了使用上面讲解到的使用subString()截取字符串外,还可以使用subSequence()函数截取。
我们看一看其源码实现:
public fun subSequence(startIndex: Int, endIndex: Int): CharSequence public fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)从源码中我们可以看出,其大致和subString()函数一样,但是其不提供只传递startIndex的情况
实例:
val str = "Kotlin is a very good programming language" println(str.subSequence(0,15)) println(str.subSequence(IntRange(0,15)))输出结果为:
Kotlin is a ver Kotlin is a very 三、字符串替换