ITmob-Ly
发布于 2022-08-26 / 1787 阅读
0

Kotlin 中连接字符串的五种方式

Kotlin 中可以使用多种方式连接两个或多个字符串,本文介绍常见的五种方式。

1. **使用 plus() 方法

Kotlin 的 String **类包含一个plus()方法:

public operator fun plus(other: Any?): String

它返回一个通过连接调用该方法的字符串和作为参数传递的字符串获得的字符串。

示例:

fun plusMethod() {
    val str1 = "Hello"
    val str2 = "ITmob"
    val greeting = str1.plus(" ").plus(str2)
}

2. **使用 + 运算符

在 Kotlin 中连接字符串的最简单方法是使用 + 运算符。一般是用来连接少量字符串的常用方法(原因参见 3. 使用 StringBuilder)。

在 Kotlin 中,由于运算符重载, + 运算符被解析为 plus() 方法。

fun plusOperator() {
    val str1 = "Hello"
    val str2 = "ITmob"
    val greeting = str1 + " " + str2
}

3. 使用 StringBuilder

众所周知,无论 Java 还是 Kotlin 中 String 对象都是不可变的。每次使用 + 运算符或 plus() 方法进行连接时,我们都会得到一个新的 String 对象。

为了避免不必要的String对象创建,我们可以使用 StringBuilderStringBuilder 在连接大量字符串时效率更高。

示例:

fun stringBuilder() {
    val builder = StringBuilder()
        builder.append("Hello")
               .append(" ")
               .append("ITmob")
}

也可以使用 StringBuffer 代替 StringBuilder 进行线程安全的连接*。*

4. 使用字符串模板

Kotlin 还有字符串模板的功能。字符串模板表达式以美元符号开头,后跟变量名。

示例:

fun templates() {
    val str1 = "Hello"
    val str2 = "ITmob"
    val greeting = "$str1 $str2"
}

Kotlin 编译器字符串模板代码转换为:

new StringBuilder().append(str1).append(" ").append(str2).toString()

5. 对于集合还可以使用 Iterable 的扩展方法 joinToString() 方法

joinToString() 把使用分隔符分隔的所有元素创建一个字符串

示例:

fun joinToString() {
    var list = listOf("Hello", "ITmob")
    val greeting = list.joinToString(" ")
}

还可以使用给定的前缀、后缀、甚至还能指定 transform 函数自定义集合中元素的表示形式

// 如果不指定分隔符,使用默认参数,元素之间会以逗号加空格分隔
val numbers = listOf("one", "two", "three", "four")
println(numbers.joinToString())

=> one, two, three, four

// 可以指定参数 separator, prefix, 以及 postfix
val numbers = listOf("one", "two", "three", "four")    
println(numbers.joinToString(separator = " | ", prefix = "start: ", postfix = ": end"))

=> start: one | two | three | four: end

// 对于较大的集合, 可以指定 limit – 结果中包含的最大元素个数.
// 如果集合大小超过 limit 值, 所有超过的元素会被替换为 truncated 参数指定的值.
val numbers = (1..100).toList()
println(numbers.joinToString(limit = 10, truncated = "<...>"))

=> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, <...>

// 如果要控制集合元素本身的字符串表示形式, 可以指定一个 transform 函数
val numbers = listOf("itmob", "one", "two", "three")
println(numbers.joinToString { "${it.uppercase()}"})

=> ITMOB, ONE, TWO, THREE