一、String字符串
1.1 创建
构造需要进行拼接的字符串时,典型做法是使用 StringBuilder 再转成 String,可以使用构建器函数 buildString{} 进行简化。
| buildString() |
public inline fun buildString(builderAction: StringBuilder.() -> Unit): String public inline fun buildString(capacity: Int, builderAction: StringBuilder.() -> Unit): String 参数capacity是指定大小,参数builderAction是每个元素的初始化方式。 |
val str1 = "aaa"
val str2 = StringBuilder().apply {
append("aaa")
}.toString()
val str3 = buildString {
append("aaa")
}
1.2 增
| plus () | 字符串拼接,可传入任意类型 |
val str = "Hello Kotlin"
val num = "123456123"
println(str + num) //Hello Kotlin123456123
println(str.plus(Person())) //Hello KotlinPerson{name='Default', age=0}
println(str[1]) //e
1.3 删
|
drop (去除的个数) dropLast (去除的个数) dropWhile (predicate) dropLastWhile (predicate) |
去除前N个元素 去除后N个元素 根据条件正向去除元素,下一个元素不满足时停止去除 根据条件反向去除元素,下一个元素不满足时停止去除 |
|
take (获取的个数) takeLast (获取的个数) takeWhile (predicate) takeLastWhile (predicate) |
获取前N个元素,如果N大于字符串长度则返回整个字符串 获取后N个元素,如果N大于字符串长度则返回整个字符串 根据条件正向获取元素,下一个元素不满足时停止获取 根据条件反向获取元素,下一个元素不满足时停止获取 |
|
subSequence (开始位置,结束位置) subSequence (Range) subString (开始位置) subString (开始位置,结束位置) subString (Range) |
截取两个索引之间的字符串,不包括结束位置上的元素 截取该区间索引之间的字符串,包括结束位置上的元素 从开始位置一直截取到最后 截取两个索引之间的字符串,不包括结束位置上的元素 截取该区间索引之间的字符串,包括结束位置上的元素 |
val str = "Hello Kotlin"
val num = "123456123"
println(num.drop(3)) //456123
println(num.substring(3)) //456123
println(num.dropLast(3)) //123456
println(num.substring(0, num.length - 3)) //123456
println(num.dropWhile { it == '1' }) //23456123
println(num.substring(1..3)) //234
println(num.take(3)) //123
println(num.takeLast(3)) //123
println(num.takeWhile { it == '1' || it == '2' }) //12
println(num.takeLastWhile { it == '1' }) //结果为空
println(str.subSequence(2,4)) //ll
println(str.subSequence(2..4)) //llo
println(str.substring(2)) //llo Kotlin
println(str.substring(2,4)) //ll
println(str.substring(2..4)) //llo
1.4 改
|
toUpperCase () toLowerCase () |
全部转为大写 全部转为小写 |
| reversed () | 将元素倒序排列 |
|
trim () trimStart () trimEnd () |
同时去除首尾空格 去除开头空格 去除结尾空格 |
|
replace (旧值,新值,默认false不忽略大小写) replace (正则表达式,新值) replaceFirst (旧值,新值) replaceBefore (目标值,添加值) replaceBeforeLast (目标值,添加值) replaceAfter (旧值,新值) replaceAfterLast(目标值,添加值) |
旧值替换成新值 替换满足正则表达式的部分为新值 替换满足条件的第一个字符/字符串 去掉满足条件的字符/字符串之前的元素,并在之前添加新元素 去掉最后一个满足条件的字符/字符串之前的元素,并在之前添加新元素 去掉满足条件的字符/字符串之后的元素,并在之后添加新元素 去掉最后一个满足条件的字符/字符串之后的元素,并在之后添加新元素 |
|
split (Regex ("正则表达式")) split (Pattern.compile ("正则表达式")) split (字符/字符串) | 通过正则表达式或者字符/字符串进行分割,返回的是数组 |
val str = "Hello Kotlin"
val num = "123456123"
println(str.toUpperCase()) //HELLO KOTLIN
println(str.toLowerCase()) //hello kotlin
println(str.reversed()) //niltoK olleH
println(str.replace("Hello", "NiHao")) //NiHao Kotlin
println(str.replace("hello", "NiHao")) //Hello Kotlin
println(str.replace("Hello", "NiHao", true)) //NiHao Kotlin
println(str.replace("hello", "NiHao", false)) //Hello Kotlin
println(num.replace('1', '9')) //923456923
println(num.replace(Regex("[0-9]+"), "a"))
println(num.replaceFirst('2', '9')) //193456123
println(num.replaceBefore('4', "99")) //99456123
println(num.split('2')) //[1, 34561, 3]
1.5 查
isEmpty/isNotEmpty:要求长度非0。
isBlank/isNotBlank:要求内容非空白,长度非0且不能全是空白字符(空格、/t、/n)。
isNullOrEmpty/isNullOrBlank:支持可空类型,避免空指针异常。
| get (索引) | 根据索引获取字符串中的元素,推荐使用操作符 [ ] |
|
startsWith (字符/字符串) endsWith (字符/字符串) |
是否以目标字符/字符串开始,重载方法可指定起始位置和是否忽略大小写 是否以目标字符/字符串结尾,重载方法可指定起始位置和是否忽略大小写 |
|
count () count (Predicate) |
获取字符串长度,推荐用 .length 返回符合条件的字符个数 |
|
frist () frist (Predicate) fristOrNull () fristOrNull (Predicate) 同理 Last、find |
返回第一个元素,没有匹配结果抛异常( 相当于str[0]、str.get(0) ) 返回第一个满足条件的元素,没有匹配结果抛异常 返回第一个元素,没有匹配结果返回null 返回第一个满足条件的元素,没有匹配结果返回null 同理Last、find |
|
isEmpty () isNotEmpty () isNullOrEmpty () isBlank () isNotBlank () isNullOrBlank () |
public inline fun CharSequence.isEmpty(): Boolean 判断条件:length == 0。 |
|
public inline fun CharSequence.isNotEmpty(): Boolean 判断条件:length > 0。 | |
|
public inline fun CharSequence?.isNullOrEmpty(): Boolean 判断条件:this == null || length == 0。 | |
|
public fun CharSequence.isBlank(): Boolean 判断条件:length == 0 || 空白字符 == length。长度为0或全是空白字符(空格、/t、/n)。 | |
|
public inline fun CharSequence.isNotBlank(): Boolean 判断条件:上面取反,长度不为0或有字符不是空格。 | |
|
public inline fun CharSequence?.isNullOrBlank(): Boolean 判断条件:this == null || this.isBlank()。 | |
|
orEmpty() ifEmpty() ifBlank() |
public inline fun String?.orEmpty(): String = this ?: "" 如果为null返回空字符串""。 |
|
public inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : CharSequence, C : R 为Empty提供默认值,取代 if( str.isEmpty() )...else... | |
|
public inline fun <C, R> C.ifBlank(defaultValue: () -> R): R where C : CharSequence, C : R 为Blank提供默认值,取代 if( str.isBlank() )...else... | |
|
indexOf (字符/字符串,默认0开始位置,默认false忽略大小写) lastIndexOf (字符/字符串,默认length-1位置,默认false忽略大小写) indexOfFrist (Predicate) indexOfLast (Predicate) |
查找目标字符/字符串第一次在原字符串中出现的位置 查找目标字符/字符串最后一次在原字符串中出现的位置 根据条件,查找目标字符第一次在原字符串中出现的位置 根据条件,查找目标字符最后一次在原字符串中出现的位置 |
val str = "Hello Kotlin"
val num = "123456123"
println(str[6]) //K
println(str.get(6)) //K
println(num.first()) //1
println(num.first { it == '4' }) //4
println(num.count()) //9
println(num.length) //9
println(num.count { it == '1' }) //2
println(num.startsWith('1'))
println(str.indexOf('l')) //2
println(num.lastIndexOf("23")) //7
println(str.indexOfFirst { it == 'l' }) //2
println(str.indexOfLast { it =='l' }) //9
1.6 遍历
//使用for循环进行遍历
for (s in str) print(s + ",") //H,e,l,l,o, ,K,o,t,l,i,n,
二、字符串模版
| 符号 | 说明 |
| "文本内容" | 转义字符串(和Java一样) |
| """文本内容""" | 原生字符串(里面内容原原本本打印,包括换行和转义字符) |
| $ | 引用变量 |
| ${} | 调用方法和运算 |
//增
var str = "2" + 32 //用 + 操作符连接字符串,第一个元素要是字符串
str += "00" //字符串拼接
println(str) //打印:23200
//改
val aa = "小明和朋友玩得很开心!"
val bb = "小红"
println(aa.replace("朋友", bb)) //打印:小明和小红玩得很开心!
//查
val str2 = "今天天气不错"
println(str2[5]) //字符串元素可通过索引拿到,打印:错
for (s in str2) print(s + ",") //遍历
//字符串模版
val person = Person("John", 23)
println("姓名:${person.name},年龄:${person.age}") //打印:姓名:John,年龄:23
val a = 5
val b = 3
println("一共有${a+b}个人") //打印:一共有8个人
println("$a+$b=${show(5, 3)}") //打印:5+3=8
val answer = true
println("答案是:${if(answer)"正确" else "错误"}") //打印:答案是:正确
//打印:映入眼帘的是"紫禁城"3个大字
val place = "紫禁城"
println("映入眼帘的是\"" + place + "\"闪闪的" + place.length + "个大字") //JAVA拼接方式
println("映入眼帘的是\"$place\"闪闪的${place.length}个大字") //斜杠转义方式
println("""映入眼帘的是"$place"闪闪的${place.length}个大字""") //"""原生字符串
println("去${place}玩看到${place.length}个大字") //去紫禁城玩看到3个大字
//打印美元符号
val c = 4.22
println("价格是$$c") //打印:价格是$4.22
//正则表达式
val pattern = """^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}"""
val email = "google@gmail.com"
val regex1 = Regex(pattern) //方式一:构造
val regex2 = pattern.toRegex() //方式二:扩展函数
println(regex1.matches(email)) //精确匹配
println(regex1.containsMatchIn(email)) //包含匹配
val str1 = "AB12CD34EF"
val regex3 = Regex("""\d+""")
println(regex3.find(str1)?.value) //打印:12,返回查找到的第一个匹配的字符串,没找到返回null
regex3.findAll(str1).forEach { e -> print(e.value + ",") } //打印:12,34, 查找所有匹配的字符串,返回的Sequence是可以迭代的集合,元素类型是MatchResult
println(regex3.replace(str1, "-")) //打印:AB-CD-EF,替换
println(regex3.split(str1)) //打印:[AB, CD, EF],若传入limit值表示分割几次就不分割了。默认为0表示符合条件就分割
fun show(a: Int, b: Int) = a + b
该博客围绕Kotlin的String字符串及字符串模版展开。在String字符串部分,介绍了创建方法,构造拼接字符串时,可使用构建器函数buildString{}简化典型的StringBuilder转String做法。还列出了增、删、改、查、遍历等操作,但未详细阐述。此外,还提及了字符串模版。
538

被折叠的 条评论
为什么被折叠?



