Kotlin语言相对于Java语言在字符串上做了一些增强,字符串也是一种数据类型
字符串的定义
字符串表示一串连续的字符,在Kotlin中用String表示一个字符串时,需要用一对英文半角格式的双引号""引起来。一个字符串可以包含一个或者多个字符,也可以不包含任何字符,即长度为0
var str: String = "Hello World!" //第1 种定义方式
var str = "Hello World!" //第2 种定义方式
字符串是不可变的,字符串中的元素可以使用索引的形式进行访问:即“变量名+角标”的形式,如str[i];也可以用for循环遍历字符串
fun main(args: Array) {
var str = "Hello World!"
// 获取字符串长度
println(str.length)
// 通过索引方式访问某个字符,角标从0 开始
println(str[4])
// 通过for 循环迭代字符串
for (c in str) {
print(c)
}
}
字符串查找
在Kotlin中,为了方便字符串的查找,提供了多个函数,如first()、last()、get(index),分别用于查找字符串中的第1个元素、最后1个元素以及角标为index的元素
fun main(args: Array) {
var str = "Hello World!"
println(str.first()) // 获取第1个元素
println(str.last()) //获取最后1个元素
println(str.get(4)) //获取第5个元素
println(str[4])//获取第5个元素
println(str.indexOf('o'))//查找字符串在原字符串中第1次出现的角标
println(str.lastIndexOf('o'))//查找字符串在原字符串中最后1次出现的角标
}
字符串截取
在Kotlin中,字符串截取主要使用的是subString()函数和subSequence()函数
fun main(args: Array) {
var str = "Hello World!"
println(str.substring(3)) // 截取角标为3,到角标结束的字符
println(str.substring(3, 7)) // 截取角标为3,到角标为 6 的字符
println(str.substring(IntRange(3, 7))) // 截取角标为3,到角标为 7 的字符
println(str.subSequence(3, 7)) // 截取角标为3,到角标为 6 的字符
println(str.subSequence(IntRange(3, 7))) // 截取角标为3,到角标为 7 的字符
}
字符串替换
在Kotlin中,除了可以使用Java中的replace()函数实现字符串的替换之外,还可以使用replaceFirst()、replaceAfter()、replaceBefore()等函数用于字符串的替换
fun main(args: Array) {
var str = "Hello World! Hello World!"
println(str.replace("World", "Kotlin"))
println(str.replaceFirst("World", "Kotlin"))
println(str.replaceBefore("!", "Kotlin"))
println(str.replaceAfter("Hello ", "Kotlin!"))
}
字符串分隔
与Java语言类似,Kotlin语言中的字符串分隔也是调用split()函数进行的
fun main(args: Array) {
val str = "hello.kotlin"//字符串
val split = str.split(".") //根据点号进行拆分
print(split) //打印拆分结果
}
在Kotlin中,split()函数还可以传入多个拆分符,多个拆分符中间只需用逗号分隔即可
fun main(args: Array) {
var str="hello.kotlin/world"
var split=str.split(".","/")
println(split)
}
字符串去空格
在实际操作中,经常需要删除字符串中的空格,为此Kotlin提供了trim()、trimEnd()等多个函数,其中trim()用于删除字符串前面的空格,trimEnd()用于删除字符串后面的字符。
fun main(args: Array) {
var str = " Hello World! "
println(str.trim())
println(str.trimEnd())
}
字符串字面值
字符串的字面值是一串字符常量,字符串字面值常量是用双引号括起来""的零个或多个字符,如“hello”。Kotlin中有两种类型的字符串字面值,一种是转义字符串,可以包含转义字符,另一种是原生字符串,可以包含转义字符、换行和任意文本。
(1)转义字符串
转义是采用传统的反斜杠“\”方式将字符进行转义。Kotlin中的转义字符串与Java中的转义字符串类似,字符串在输出时,如果想要输出一些特殊字符,则需要用到转义字符串,比如\t,\b,\n,\r,\',\",\\和\$。
fun main(args: Array) {
// 字符串中包含转义字符
val str = " 您\n好"
println(str)
}
反斜杠(\)
反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面的一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如换行(\n)。下面列出一些常见的转义字符。• \r:表示回车符,将光标定位到当前行的开头,不会跳到下一行。• \n:表示换行符,换到下一行开头。• \t:表示制表符,将光标移动到下一个制表符的位置,类似在文档中用Tab键的效果。• \b:表示退格符号,类似键盘上的Backspace键。• \':表示单引号字符,在Kotlin代码中单引号表示字符的开始和结束,如果直接写单引号字符('),程序会认为前两个是一对,会报错,因此需要使用转义字符(\')。• \":表示双引号字符,Kotlin中双引号表示字符串的开始和结束,包含在字符串中的双引号需要转义,比如""。• \\:表示反斜杠字符,由于在Kotlin代码中的反斜杠(\)是转义字符,因此需要表示字面意义上的\,就需要使用双反斜杠(\\)。
(2)原生字符串
原生字符串是使用3对引号("""""")把所有字符括起来,原生字符串可以有效地保证字符串中原有内容的输出,即使原生字符串中包含转义字符也不会被转义
fun main(args: Array) {
// 转义字符串
val str1 = " 您\n好"
println(str1)
// 原生字符串
val str2 = """ 您 \n 好"""
println(str2)
}
模板表达式
字符串可以包含模板表达式。所谓的模板表达式就是在字符串中添加占位符,字符串模板表达式由${变量名/函数/表达式}组成,也可以省略{},例如“$变量名”。接下来介绍一下字符串模板表达式的几种使用方式。
(1)在字符串中,使用模板表达式存储字符串的值
fun main(args: Array) {
var a = 1;
// 语法格式${变量}
var s1 = "a is ${a}"
// 可以省略大括号
var s2 = "a is $a"
println(s1)
println(s2)
}
(2)在字符串中,使用模板表达式调用其他方法
fun main(args: Array) {
// 语法格式${方法()}
println("${helloWorld()}")
}
fun helloWorld(): String {
return "Hello World"
}
(3)在字符串中,使用模板表达式执行替换操作
fun main(args: Array) {
var s2 = "a is 1"
// 语法格式${表达式},执行表达式
var s3 = "${s2.replace("is", "was")}"
println(s3)
}
(4)在原生字符串中,使用模板表达式输出$需要使用${'$'}
fun main(args: Array) {
val price = """${'$'}8.88"""
println(price)
}
由于原生字符串中不支持反斜杠转义“\$”,因此在原生字符串中如果想要使用模板表达式输出$字符只能使用${'$'}。