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
三、字符串替换
同上述字符串截取一样,如果您有编程经验,可跳过此节。不过对于字符串替换功能,Kotlin
除了实现Java
中的replace()
ha函数外,还提供了另外的replaceFirst()
、replaceAfter()
、replaceBefore()
、replaceIndent()
、等函数。下面会对这些函数意义进行实例讲解。
3.1、replace()函数
replace()
函数提供了4个重载函数。他们能实现不同的功能
3.1.1、 replace(oldChar,newChar,ignoreCase = false)
作用 : 把原字符串中的某一个字符全部替换成新的字符。然后返回新的字符串
oldChar
: 需要替换的字符newChar
: 新的字符ignoreCase
: 是否引用Java
中的replace()
函数。默认值为false
,即用Java
的replace()
函数
例:
// 把字符a
全部替换为A
val str = “Kotlin is a very good programming language”
println(str.replace(‘a’,‘A’))
输出结果为:
Kotlin is A very good progrAmming lAnguAge
3.1.2、 replace(oldValue,newValue,ignoreCase = false)
作用 : 把原字符串中的某一个字符全部替换成新的字符。然后返回新的字符串
oldValue
: 需要替换的字符串newValue
: 新的字符串ignoreCase
: 是否引用Java
中的replace()
函数。默认值为false
,即用Java
的replace()
函数
例:
// 把字符串Kotlin
替换成字符串Java
val str = “Kotlin is a very good programming language”
println(str.replace(“Kotlin”,“Java”))
输出结果为:
Java is a very good programming language
3.1.3、 replace(regex,replacement)
作用 : 根据定义的正则规则去匹配源字符串,把满足规则的字符串替换成新的字符串。
regex
: 正则表达式replacement
: 新的字符串
例:
// 正则的规则为检测数字,如果为数字则替换成字符串kotlin
val str = “1234a kotlin 5678 3 is 4”
println(str.replace(Regex(“[0-9]+”),“kotlin”))
输出结果为:
kotlina kotlin kotlin kotlin is kotlin
3.1.4、replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence)
- 作用 : 根据定义的正则规则去匹配源字符串,把满足规则的字符串通过
transform{}
高阶函数映射的新字符串替换。regex
: 正则表达式transform
: 高阶函数
例:
val str = “1234a kotlin 5678 3 is 4”
val newStr = str.replace(Regex(“[0-9]+”),{"abcd "})
输出结果为:
abcd abcd abcd abcd a kotlin abcd abcd abcd abcd abcd is abcd
可以从上述的两个函数中看到两个函数的区别。关于高阶函数
、正则表达式
的知识点可以先自行看资料理解。小生会在后续的章节中补上相关的内容…
经过上面的replace()
函数的讲解。并且对几个重载函数进行了分析。相信大家对replace()
函数中的参数都有大致的了解。并且下面的几个函数也是大致相同的操作。故而下面的几个函数操作,我只会举例说明其作用。关于参数的介绍就不作细究了
3.2、replaceFirst()
作用:把满足条件的第一个字符或字符串替换成新的字符或字符串
例:
val str = “Kotlin is a very good programming language”
println(str.replaceFirst(‘a’,‘A’))
println(str.replaceFirst( “Kotlin”,“Java”))
输出结果为:
Kotlin is A very good programming language
Java is a very good programming language
3.3、replaceBefore()
作用:截取满足条件的第一个字符或字符串后面的字符串,包含满足条件字符或字符串自身,并在其前面加上新的字符串。
例:
val str = “Kotlin is a very good programming language”
println(str.replaceBefore(‘a’,“AA”))
println(str.replaceBefore(“Kotlin”,“Java”))
输出结果为:
AAa very good programming language
JavaKotlin is a very good programming language
3.4、replaceBeforeLast()
作用:截取满足条件的最后一个字符或字符串后面的字符串,包含满足条件字符或字符串自身,并在其前面加上新的字符串。
例:
val str = “Kotlin is a very good programming language”
println(str.replaceBeforeLast(‘a’,“AA”))
println(str.replaceBeforeLast(“Kotlin”,“Java”))
输出结果为:
AAage
JavaKotlin is a very good programming language
3.5、replaceAfter()
作用:截取满足条件的第一个字符或字符串前面的字符串,包含满足条件字符或字符串自身,并在其后面加上新的字符串。
例:
val str = “Kotlin is a very good programming language”
println(str.replaceAfter(‘a’,“AA”))
println(str.replaceAfter(“Kotlin”,“Java”))
输出结果为:
Kotlin is aAA
KotlinJava
3.6、replaceAfterLast()
作用:截取满足条件的最后一个字符或字符串前面的字符串,包含满足条件字符或字符串自身,并在其后面加上新的字符串。
例:
val str = “Kotlin is a very good programming language”
println(str.replaceAfterLast(‘a’,“AA”))
println(str.replaceAfterLast(“Kotlin”,“Java”))
输出结果为:
Kotlin is a very good programming languaAA
KotlinJava
四、字符串分割
同上一节一样,Kotlin
除了实现Java
中的split()
函数之外,还提供了splitToSequence()
函数来分割字符串。分割成功后都会返回一个字符串集合用于我们后续操作。
4.1、 split()
split()
函数也是提供了4
个重载函数。其中,用正则表达式为条件分割占用两个。用字符分割占用一个。用字符串分割占用一个。
4.1.1、使用正则表达式分割
在Kotlin
中使用正则表达式,使用的是Regex
类,而Java
中使用正则表达式使用的Pattern
类。这里分别举例说明
例:
var str2 = “1 kotlin 2 java 3 Lua 4 JavaScript”
val list3 = str2.split(Regex(“[0-9]+”))
for (str in list3){
print(“$str \t”)
}
println()
val list4 = str2.split(Pattern.compile(“[0-9]+”))
for (str in list4){
print(“$str \t”)
}
输出结果为:
kotlin java Lua JavaScript
kotlin java Lua JavaScript
4.1.2、使用字符或字符串分割
在实际的项目开发中,还是这种方式用的要多一些。不过这里值得注意的是,不管是用字符分割,还是字符串分割,其都是一个可变参数。即其参数的个数不定。
例:
val str1 = “Kotlin is a very good programming language”
val list1 = str1.split(’ ')
for (str in list1){
print(“$str \t”)
}
println()
val list2 = str1.split(" “)
for (str in list2){
print(”$str \t")
}
输出结果为:
Kotlin is a very good programming language
Kotlin is a very good programming language
这里举例一个可变参数情况的例子:
val str3 = “a b c d e f g h 2+3+4+5”
val list5 = str3.split(’ ‘,’+')
for (str in list5){
print(“$str \t”)
}
输出结果为:
a b c d e f g h 2 3 4 5
4.2、 splitToSequence()
此函数同样可以用字符串或字符去分割,其用法和上述的split()
函数一样。这里就不多累述了…
五、其他
除了上面讲解到的几点外,还有很多常用的处理,比如检测字符串是否为空串,是否为null
,获取字符串长度,字符串反转,统计,转换字符数组,获取指定下标的字符等等。
5.1、 获取字符串长度
在
Kotlin
中用两种获取字符串长度的方法。其实也是一种而已
- 直接用
length
属性获取长度- 用
count()
函数获取,其实count()
函数的做法也是返回了length
长度。
实例:
val str = “kotlin very good”
// 1. 直接用length属性获取
println(“str.length => ${str.length}”)
// 2. 用count()函数获取
println(“str.count() => ${str.count()}”)
输出结果为:
str.length => 16
str.count() => 16
这里我们看一看count()
函数的源码
/**
* Returns the length of this char sequence.
* 其实也就是返回了length属性…
*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.count(): Int {
return length
}
5.2、统计重复字符
上面讲到了count()
函数,是返回了length
属性获取字符串的长度。其实源码中还提供了一个叫count{}
的高阶函数,用于统计字符串中重复某个字符的个数。
/*
count{}函数源码
该函数接受一个Boolean
类型的Lambda
表达式。然后循环这个字符串,如果我的条件成立,则变量count
自增。
循环完成之后返回重复的个数count
*/
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int {
var count = 0
for (element in this) if (predicate(element)) count++
return count
}
实例:
val str = “kotlin very good”
val count = str.count { it == ‘o’ }
println(“count : $count”)
输出结果为:
count : 3
5.3、 验证字符串
在实际的开发中,特别是Android
开发中,会经常遇到验证输入框的内容是否为空串的时候。在Kotlin
中,和Java
一样提供了几个处理这种情况的函数。
下列几个函数都是处理字符串为空串或为空的:
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()
函数
实例:
val str : String? = “kotlin”
/*
可以看出当str为可空变量的时候,isNullOrEmpty()和isNotOrBlank()可以不做直接调用而不做任何处理
,而其他的函数则不行
*/
str?.isEmpty() //false
str?.isNotEmpty() // true
str.isNullOrEmpty() //false
str?.isBlank() //false
str?.isNotBlank() //true
str.isNullOrBlank() //false
5.4、字符串连接
字符串链接,在Java
中只能使用+
来链接,当然除了StringBuilder、StringBuffer
除外。而在Kotlin
中除了使用+
以外,还可以使用plus()
函数。其接受任意类型。plus()
函数是一个运算符重载函数。在前面的章节中讲解过了。若你对Kotlin
中的云素福重载不了解,您可以查看我的另一篇文章:Kotlin——初级篇(五):操作符重载一
实例讲解:
val oldStr = “kotlin”
println(oldStr.plus(" very good"))
println(oldStr + " very good")
输出结果为:
kotlin very good
kotlin very good
5.5、字符串反转
和数组一样,字符串也是可以反转元素的。直接使用reversed()
函数即可。
例:
val str = “kotlin”
println(“字符串反转:${str.reversed()}”)
输出结果:
字符串反转:niltok
5.6、判断字符串的起始与结尾
5.6.1、 startsWith()
作用: 判断其字符串是否由某一个字符或字符串起始。
char
: 起始字符prefix
: 起始字符串ignoreCase
: 是否调用Java
中的此函数。默认为false
startIndex
: 开始位置
例:
val str = “kotlin”
println(str.startsWith(‘k’)) // 是否有字符k
起始
println(str.startsWith(“Kot”)) // 是否由字符串kot
起始
println(str.startsWith(“lin”,3)) // 当起始位置为3时,是否由字符串lin
起始
输出结果为:
true
true
true
5.6.2、endsWith()
作用: 判断其字符串是否由某一个字符或字符串结尾。
char
: 结尾字符suffix
: 结尾字符串ignoreCase
: 是否调用Java
中的此函数。默认为false
总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
[外链图片转存中…(img-brhDFJwP-1715410453564)]
[外链图片转存中…(img-nZcQ88XP-1715410453569)]
[外链图片转存中…(img-GsK9LIPE-1715410453571)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!