字符串替换函数 replace 函数原型如下 :
/*** 返回一个新字符串,通过替换此字符序列中匹配给定正则表达式的每个子字符串获得* 用给定的[替换]。** [replacement]可以由文字文本和$-substitution的任意组合组成。来处理替换字符串* 使用[kotlin.text.Regex.Companion.escapeReplacement]方法进行转义。*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.replace(regex: Regex, replacement: String): String = regex.replace(this, replacement)/*** 返回一个新字符串,通过替换此字符序列中匹配给定正则表达式的每个子字符串获得* 使用给定函数[transform]的结果,该函数接受[MatchResult],并返回一个字符串用作* 替换该匹配。*/
@kotlin.internal.InlineOnly
public inline fun CharSequence.replace(regex: Regex, noinline transform: (MatchResult) -> CharSequence): String =regex.replace(this, transform)
代码示例 :
fun main() {var info = "hello world"var str = info.replace(Regex("[ol]")){when(it.value) {"o" -> "?""l" -> "%"else -> it.value}}println(str)
}
在上述代码中 ,
第一个参数 regex: Regex
, 是正则表达式 ,
对应代码中的 Regex("[ol]")
, 该正则表达式的含义是 单个字符 o
或者 l
;
第二个参数 noinline transform: (MatchResult) -> CharSequence): String
, 是返回 String
值的闭包 ,
对应代码中的 匿名函数 / Lambda 表达式 / 闭包 ,
其含义是 : 遇到字母 o
就替换为 ?
, 遇到字母 l
就替换为 %
, 其它字母保持不变 ;
执行结果 :
he%%? w?r%d
Kotlin 语言中的字符串比较操作符 :
==
的作用是 比较 两个字符串 的 字符内容是否 相等 ; 相当于 Java 中的 equals
方法 ;===
的作用是 比较 两个字符串 的 堆内存中的 引用地址 是否相等 ; 相当于 Java 中的 ==
操作符 ;代码示例 :
fun main() {val name0 = "Tom"val name1 = "Tom"// 比较内容, 相当于 Java 中的 equals 方法println(name0 == name1)// 比较地址, 相当于 Java 中的 == 操作符// 二者都是常量池的相同地址println(name0 === name1)
}
执行结果 :
true
true
对比代码示例 :
fun main() {val name0 = "Tom"var str = "T"val name1 = str + "om"// 比较内容, 相当于 Java 中的 equals 方法println(name0 == name1)// 比较地址, 相当于 Java 中的 == 操作符// 此处由于 name1 是运行时计算出来的, 不是常量池中的常量// name0 是常量池中的常量println(name0 === name1)
}
执行结果 :
true
false
调用 字符串 String 的 forEach 函数 ,
可以 遍历字符串中的每个字符 ,
并且 针对该字符 执行相应 Lambda 表达式 的操作 ;
在 forEach 函数 中 , 可以通过 it 参数 获取对应的 字符 ;
Lambda 表达式 就是 匿名函数 , 也是 闭包 ;
String#forEach 函数原型 :
/*** 在每个字符上执行给定的[动作]。*/
public inline fun CharSequence.forEach(action: (Char) -> Unit): Unit {for (element in this) action(element)
}
代码示例 :
fun main() {val name = "Tom"name.forEach {println(it)}
}
执行结果 :
T
o
m