substring
字符串截取。相加与 java,kt 里面的 substring 函数支持 IntRange 类型(表示一个整数范围的类型)的参数,until 创建的范围不包括上限值。
const val NAME = "Jimmy's friend"
fun main(){
val index = NAME.indexOf("\'") // 获取到 ' 所在位置的索引
// val str = NAME.substring(0, index) // 这种是 java 里的写法
val str = NAME.substring(0 until index) // TODO until 就是一个 IntRange 类型
println(str)
}
这里的 until 就是 IntRange 类型。
split
split 函数返回的是 List 集合数据,List 集合又支持结构语法特性,它允许你在一个表达式里给多个变量赋值,结构常用来简化变量的赋值。
示例:
const val NAMES = "Jack, Rose, Bot"
fun main(){
//val split = NAMES.split(", ") // split 是一个 List 集合
// split[0] // 拿里面的元素
val (one, two, three) = NAMES.split(", ") //TODO 把拆出来的每一个部分,分别赋给() 里的变量,这就是结构语法
println("$one $two $three")
}
结构语法:split 拆分出来的、放在 List 里的元素,可以一次性给一个表达式里的多个变量赋值。
replace
字符串替换。
示例:replace() 的第一个参数:正则表达式;第二个参数:lambda 表达式
fun main(){
// TODO replace()
val country = "The People's Republic of China."
val replace = country.replace(Regex("[aeiou]")) {
when (it.value) {
"a" -> "8"
"e" -> "2"
"i" -> "5"
"o" -> "7"
"u" -> "1"
else -> it.value
}
}
println(country)
println(replace)
}
*字符串比较
在 kotlin 中,用 == 检查两个字符串中的字符是否匹配,用 === 检查两个变量是否指向内存堆上同一对象,而在 Java 中 == 做引用比较,做结构比较时用 equals 方法。
示例:
val str1 = "Jason"
val str2 = "Jason"
println(str1 == str2)
println(str1 === str2)
解释说明:第一个“==”表示比较 str1 和 str2 的内容是否相同,这里肯定是相同的,结果返回 true。 第二个"===" 比较的是 str1 和 str2 是否是同一个对象,这里返回 true,说明它们是同一个对象。原因是因为,在 java 的 JVM 中对字符串的存储是有一个 单独的地方, 叫字符串常量池,当我们创建 str1 = "Jason" 时,那么这个 "Jason" 字符串是在常量池里是不可变的。当我们创建 str2 = "Jason" 时,JVM 就不会在内存中再开辟一块空间来存放另一个 "Jason",而是让 str2 直接指向 str1 创建的 "Jason" 字符串的地址。所以,str1 和 str2 是同一个对象。
字符串的遍历
通过 forEach() 遍历字符串里的每一个字符。
示例:
fun main(){
// TODO forEach
"HLLXY".forEach {
print("$it+")
}
}