关于Kotlin:Kotlin-如何正确连接字符串

Kotlin - How to correctly concatenate a String

一个非常基本的问题,在Kotlin中连接字符串的正确方法是什么?

在Java中,您将使用concat()方法,例如

1
2
String a ="Hello";
String b = a.concat("World"); // b = Hello World

concat()函数不适用于Kotlin。我应该使用+符号吗?


字符串模板/插值

在Kotlin中,可以使用字符串插值/模板进行连接:

1
2
3
val a ="Hello"
val b ="World"
val c ="$a $b"

输出将是:Hello World

  • 编译器将StringBuilder用于String模板,这是内存方面最有效的方法,因为+ / plus()会创建新的String对象。

或者您可以显式使用StringBuilder进行连接。

1
2
3
4
5
6
7
8
val a ="Hello"
val b ="World"

val sb = StringBuilder()
sb.append(a).append(b)
val c = sb.toString()

print(c)

输出将是:HelloWorld

新的字符串对象

或者您可以使用+ / plus()运算符进行连接:

1
2
3
4
5
val a ="Hello"
val b ="World"
val c = a + b   // same as calling operator function a.plus(b)

print(c)

输出将是:HelloWorld

  • 这将创建一个新的String对象。


kotlin.String具有plus方法:

1
a.plus(b)

有关详细信息,请参见https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html。


我同意上面接受的答案,但这仅适用于已知的字符串值。
对于动态字符串值,这是我的建议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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有字符串模板,因此最好像这样使用它们:

1
2
var fn ="Hello"
var ln ="World"

"$fn $ln"用于串联。

您甚至可以使用String.plus()方法。


尝试一下,我认为这是在Kotlin中连接字符串的一种天然方法:

1
2
3
4
5
6
7
8
val result = buildString{
    append("a")
    append("b")
}

println(result)

// you will see"ab" in console.


类似于@Rhusfer的答案,我写了这个。如果您有一组EditText并想连接它们的值,则可以编写:

1
listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator ="") { it.text.toString() }

如果要连接Map,请使用以下命令:

1
map.entries.joinToString(separator =",")

要连接Bundle,请使用

1
bundle.keySet().joinToString(",") { key ->"$key=${bundle[key]}" }

它按字母顺序对键进行排序。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

在Kotlin中有多种连接字符串的方法
示例-

1
a ="Hello" , b="World"
  • 使用运算符
    a+b

  • 使用plus()运算符

    a.plus(b)

  • 注意-仅在内部转换为.plus()方法

    在上述2种方法中,由于字符串是不可变的,因此会创建一个新的字符串对象。如果要修改现有的字符串,可以使用StringBuilder

    1
    StringBuilder str = StringBuilder("Hello").append("World")

    yourString =" newString"

    这样,您可以连接字符串