字符串模板
1、和许多脚本语言一样,Kotlin让我们可以在字符串字面值中引用局部变量,只需要前面加个$
。
fun printName(name:String) {
println("My name is $name")
}
调用代码:
fun main() {
printName("Lily")
}
//运行结果
My name is Lily
2、还可以引用更复杂的表达式,只需要把表达式用括号括起来:${表达式}
fun printName(name: String) {
println("Hello , ${if (name.isNotEmpty()) name else "someone"}")
}
调用代码:
fun main() {
printName("Lily")
}
//运行结果
Hello , Lily
字符串操作符substring
使用字符串截取操作符substring
来截取一段名字。截取的字符串包含开始索引的字符,不包含结束索引的字符。
const val NAME = "Lucky's friends"
fun main() {
val nameEndIndex = NAME.indexOf("\'")
val name = NAME.substring(0, nameIndex)
println("nameEndIndex: $nameEndIndex | name: $name")
}
//运行结果:nameEndIndex: 5 | name: Lucky
还可以使用until
关键字实现,结果和上面相同。
const val NAME = "Lucky's friends"
fun main() {
val nameEndIndex = NAME.indexOf("\'")
val name = NAME.substring(0 until nameEndIndex)
println("nameEndIndex: $nameEndIndex | name: $name")
}
字符串操作符split
const val NAMES = "Jack,Lucky,Tom"
fun main() {
val names = NAMES.split(",")
println(names[2])
}
//运行结果:Tom
split
返回一个List集合,List集合支持解构语法特性,它允许在一个表达式中给多个变量赋值,解构常用来简化变量的赋值。来看下例子:
const val NAMES = "Jack,Lucky,Tom"
fun main() {
//解构语法特性
val (s1, s2, s3) = NAMES.split(",")
println("$s1,$s2,$s3")
}
//运行结果:Jack,Lucky,Tom
当然还有个小技巧,如果不想要其中的某个元素,直接用下划线代替变量就行,例如我们不要第二个名字,修改代码如下:
const val NAMES = "Jack,Lucky,Tom"
fun main() {
val (a, _, b) = NAMES.split(",")
println("$a,$b")
}
//运行结果:Jack,Tom
字符串操作符replace
替换操作符,下面是一个简单的使用,可以看到替换以后产生一个新的字符串,原字符串没有改变。
fun main() {
val originStr = "reining day"
val newStr1 = originStr.replace("e", "a")
println(newStr1)
println(originStr)
}
//运行结果:
//raining day
//reining day
再来看个复杂点的例子,可以传入正则表达式进行替换,看下例子:
fun main() {
//加密下面的字符串
val fruits = "apple,banana,pear"
//第一个是正则表达式,决定替换哪些字符
//第二个是匿名函数,决定改如何替换正则表达式中的字符
val encryptionFruits = fruits.replace(Regex("[a,b,p]")) {
when (it.value) {
"a" -> "6"
"b" -> "7"
"p" -> "8"
else -> it.value
}
}
println(encryptionFruits)
}
//运行结果:688le,76n6n6,8e6r
字符串操作符forEach
const val NAME = "Lucky's friends"
fun main() {
//遍历forEach
NAME.forEach {
print("$it ** ")
}
}
//运行结果:L ** u ** c ** k ** y ** ' ** s ** ** f ** r ** i ** e ** n ** d ** s **
字符串运算符== 和 ===
在Kotlin中==
相当于Java中的equals
,是对字符串的内容进行比较,相同返回true
,不同返回false
。
在Kotlin中===
相当于Java中的==
,是对字符串的地址进行比较,相同返回true
,不同返回false
。
下面例子中声明了两个字符串常量,声明的第一个字符串会存放在字符串常量池中,声明name2
的时候会先去常量池看看有没有,如果之前定义过直接指向该对象,所以name1
和name2
都是指向常量池中的同一个字符串。无论是地址还是内容都是相同的。
fun main() {
val name1 = "Lucky"
val name2 = "Lucky"
println(name1 == name2)
println(name1 === name2)
}
//运行结果:true和true
再来看下另一个例子:
fun main() {
val name1 = "Lucky"
val name3 = "lucky".capitalize()
println(name1 == name3)
println(name1 === name3)
}
//运行结果:true和false
name3
虽然和name1
内容相同,但是再调用capitalize()
的时候会生成一个新的对象,所以内容相同地址不同。