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.