Kotlin-如何正确连接字符串


89

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

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

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

concat()功能不适用于Kotlin。我应该使用+标志吗?

Answers:


137

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

val a = "Hello"
val b = "World"
val c = "$a $b"

输出将是: Hello World

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

val a = "Hello"
val b = "World"
val c = a + b   // same as calling operator function a.plus(b)

print(c)

输出将是: HelloWorld

或者您可以使用连接StringBuilder

val a = "Hello"
val b = "World"

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

print(c)

输出将是: HelloWorld


6
运算符“ +”被翻译为plus(),因此您可以写a.plus(b)或,a + b并且生成相同的字节码
D3xter

21
我研究了字节码和字符串内插在内部使用StringBuilder
crgarridos

@crgarridos,这是否意味着对于Kotlin,使用字符串插值进行级联"Hello" + "Word"与使用StringBuilder附加到字符串的性能一样someHelloStringBuilder.append("World")
亚当·赫维兹

1
字符串插值是指文字字符串内部变量的分辨率。所以从技术上讲是的。
crgarridos

22

kotlin.String有一个plus方法:

a.plus(b)

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


3
+操作是正常的,不调用转换操作符函数plus ......这不是成语
杰森米纳德

你为什么这么认为 ?
切开

1
别忘了像我一样影响您的结果,a = a.plus(b)例如
lorenzo

@lorenzo的评论解释了为什么这个答案比上面的解决方案更不受欢迎。串联时取决于多个if语句,plus()其实用性不如StringBuilder的append方法。
Panos Gr

9

是的,您可以使用+符号连接。Kotlin有字符串模板,因此最好像这样使用它们:

var fn = "Hello"
var ln = "World"

"$fn $ln" 用于串联。

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


+操作是正常的,不调用转换操作符函数plus ......这不是成语
杰森米纳德

您能否解释一下为什么您认为+的加号不是惯用语?
切开

9

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

// 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

这对于用分隔符连接字符串列表很有用。


5

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

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

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

map.entries.joinToString(separator = ", ")
// Result:
// id=123, name=John, surname=Smith


2

在kotlin示例中,可以使用多种方法来连接字符串-

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

  2. 使用plus()运算符

    a.plus(b)

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.