一个非常基本的问题,Kotlin中连接字符串的正确方法是什么?
在Java中,您可以使用concat()
方法,例如:
String a = "Hello ";
String b = a.concat("World"); // b = Hello World
concat()
函数在Kotlin中不可用。我应该使用加号+
吗?
concat()
函数在Kotlin中不可用。我应该使用加号+
吗?
在 Kotlin 中,您可以使用字符串插值/模板进行连接:
val a = "Hello"
val b = "World"
val c = "$a $b"
输出结果将是: Hello World
StringBuilder
是最高效的内存方法,因为+
/plus()
会创建新的字符串对象。或者您可以显式地使用StringBuilder
进行连接。
val a = "Hello"
val b = "World"
val sb = StringBuilder()
sb.append(a).append(b)
val c = sb.toString()
print(c)
HelloWorld
或者您可以使用+
/ plus()
运算符进行连接:
val a = "Hello"
val b = "World"
val c = a + b // same as calling operator function a.plus(b)
print(c)
HelloWorld
kotlin.String
有一个plus
方法:
a.plus(b)
详见https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html。
+
运算符是正常的,不会调用翻译后的运算符函数 plus
... 这不符合惯用写法。 - Jayson Minarda = a.plus(b)
。 - lorenzoplus()
比StringBuilder
的append方法不太实用。 - Panos Gr我同意上面所接受的答案,但它只适用于已知的字符串值。对于动态字符串值,这是我的建议。
// A list may come from an API JSON like
{
"names": [
"Person 1",
"Person 2",
"Person 3",
...
"Person N"
]
}
var listOfNames = mutableListOf<String>()
val stringOfNames = listOfNames.joinToString(", ")
// ", " <- a separator for the strings, could be any string that you want
// Posible result
// Person 1, Person 2, Person 3, ..., Person N
这对于使用分隔符串联字符串列表非常有用。
这对于使用分隔符串联字符串列表非常有用。
试着用这个方法,我认为这是Kotlin中本地连接字符串的一种方式:
val result = buildString{
append("a")
append("b")
}
println(result)
// you will see "ab" in console.
buildString {
而不是 stringBuild {
。 - arnonuem是的,您可以使用加号符进行字符串拼接。Kotlin具有字符串模板的功能,因此最好像这样使用它们:
是的,您可以使用加号符进行字符串拼接。Kotlin具有字符串模板的功能,因此最好像这样使用它们:
var fn = "Hello"
var ln = "World"
"$fn $ln"
用于拼接字符串。
你甚至可以使用 String.plus()
方法。
+
运算符是正常的,不会调用翻译后的 plus
运算符函数...这不是惯用语。 - Jayson Minard类似于@Rhusfer的答案,我写了这个。假如你有一组EditText
并且想要将它们的值连接起来,那么你可以这样写:
listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator = "") { it.text.toString() }
如果您想连接 Map
,请使用以下方法:
map.entries.joinToString(separator = ", ")
如果需要将 Bundle
进行连接,请使用下述方法:
bundle.keySet().joinToString(", ") { key -> "$key=${bundle[key]}" }
它会按字母顺序对键进行排序。
例如:
val map: MutableMap<String, Any> = mutableMapOf("price" to 20.5)
map += "arrange" to 0
map += "title" to "Night cream"
println(map.entries.joinToString(separator = ", "))
// price=20.5, arrange=0, title=Night cream
val bundle = bundleOf("price" to 20.5)
bundle.putAll(bundleOf("arrange" to 0))
bundle.putAll(bundleOf("title" to "Night cream"))
val bundleString =
bundle.keySet().joinToString(", ") { key -> "$key=${bundle[key]}" }
println(bundleString)
// arrange=0, price=20.5, title=Night cream
val finalString = listOf(a, b, c)
.filterNot { it.isNullOrBlank() }
.joinToString(separator = " ")
在Kotlin中,有多种连接字符串的方式。 例如 -
a = "Hello" , b= "World"
使用 + 操作符
a+b
使用 plus()
方法
a.plus(b)
注意 - + 实际上会被转换为 .plus() 方法
在以上两种方法中,由于字符串是不可变的,因此会创建一个新的字符串对象。如果我们想要修改现有的字符串,可以使用 StringBuilder。
StringBuilder str = StringBuilder("Hello").append("World")
val a = "Hello"
val b = "World"
val mString = "$a $b"
val sString = "${a, b}, I am concatenating different string with."
//Output of mString : Hello World
//Output of sString : Hello World, I am concatenating different string with.
val helloString = "Hello"
val worldString = "World"
val concatString = "$helloString $worldString"
输出
Hello World
a.plus(b)
或a + b
,生成的字节码相同。 - D3xter"Hello" + "Word"
与使用StringBuilder追加字符串somHelloStringBuilder.append("World")
的性能相同? - AdamHurwitz