Kotlin - Cara menggabungkan String dengan benar


90

Pertanyaan yang sangat mendasar, apa cara yang tepat untuk menggabungkan String di Kotlin?

Di Java, Anda akan menggunakan concat()metode ini, misalnya

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

Namun, concat()fungsinya tidak tersedia untuk Kotlin. Haruskah saya menggunakan +tanda itu?

Jawaban:


138

Template / Interpolasi String

Di Kotlin, Anda dapat menggabungkan menggunakan interpolasi / template String :

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

Outputnya adalah: Hello World

Atau Anda dapat menggabungkan menggunakan StringBuildersecara eksplisit.

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

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

print(c)

Outputnya adalah: HelloWorld

Objek String Baru

Atau Anda dapat menggabungkan menggunakan +/ plus()operator:

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

print(c)

Outputnya adalah: HelloWorld

  • Ini akan membuat objek String baru.

7
operator "+" diterjemahkan ke dalam plus (), sehingga Anda dapat menulis a.plus(b)atau a + bdan bytecode yang sama dihasilkan
D3xter

21
Saya melihat ke bytecode dan interpolasi string menggunakan StringBuilder secara internal
crgarridos

@crgarridos, Apakah ini berarti bahwa untuk Kotlin menggunakan interpolasi string untuk penggabungan "Hello" + "Word"sama performanya dengan menggunakan StringBuilder untuk menambahkan string someHelloStringBuilder.append("World"),?
Adam Hurwitz

1
interpolasi string mengacu pada resolusi variabel di dalam string literal. jadi secara teknis ya.
crgarridos

23

kotlin.Stringmemiliki plusmetode:

a.plus(b)

Lihat https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html untuk detailnya.


3
The +operator adalah normal, tidak memanggil fungsi operator diterjemahkan plus ... ini bukan idiomatik
Jayson Minard

kenapa menurutmu begitu?
menorehkan

1
Jangan lupa untuk memengaruhi hasil Anda seperti yang saya lakukan, seperti a = a.plus(b)misalnya
lorenzo

Komentar @lorenzo menjelaskan mengapa jawaban ini kurang disukai daripada solusi di atas. Ketika penggabungan bergantung pada beberapa pernyataan if plus()kurang praktis daripada StringBuildermetode append yaitu.
Panos Gr

10

Saya setuju dengan jawaban yang diterima di atas tetapi ini hanya bagus untuk nilai string yang diketahui. Untuk nilai string dinamis, inilah saran saya.

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

Ini berguna untuk menggabungkan daftar string dengan pemisah.


9

Ya, Anda dapat menggabungkan menggunakan +tanda. Kotlin memiliki template string, jadi lebih baik menggunakannya seperti:

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

"$fn $ln" untuk penggabungan.

Anda bahkan dapat menggunakan String.plus()metode.


The +operator adalah normal, tidak memanggil fungsi operator diterjemahkan plus ... ini bukan idiomatik
Jayson Minard

Bisakah Anda menjelaskan mengapa menurut Anda versi plus dari + tidak idiomatis?
menorehkan

5

Coba ini, saya pikir ini adalah cara asli untuk menggabungkan string di Kotlin:

val result = buildString{
    append("a")
    append("b")
}

println(result)

// you will see "ab" in console.

1
ini buildString {bukanstringBuild {
arnonuem

@arnonuem Saya telah memperbaikinya (seperti yang seharusnya Anda lakukan dengan bebas).
Ellen Spertus

5

Mirip dengan jawaban @Rhusfer, saya menulis ini. Jika Anda memiliki sekelompok EditTexts dan ingin menggabungkan nilainya, Anda dapat menulis:

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

Jika Anda ingin menggabungkan Map, gunakan ini:

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

Untuk menggabungkan Bundle, gunakan

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

Ini mengurutkan kunci dalam urutan abjad.

Contoh:

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

2

Ada berbagai cara untuk menggabungkan string di kotlin. Contoh -

a = "Hello" , b= "World"
  1. Menggunakan + operator a+b

  2. Menggunakan plus()operator

    a.plus(b)

Catatan - + secara internal dikonversi ke metode .plus () saja

Dalam 2 metode di atas, objek string baru dibuat karena string tidak dapat diubah. jika kita ingin mengubah string yang sudah ada, kita bisa menggunakan StringBuilder

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

1

yourString + = "newString"

Dengan cara ini Anda dapat menggabungkan string

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.