Kotlin - Bir String nasıl doğru şekilde bitiştirilir


90

Çok basit bir soru, Kotlin'de bir Stringi birleştirmenin doğru yolu nedir?

Java'da concat()yöntemi kullanırsınız , örneğin

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

concat()Fonksiyon Kotlin da uygun kullanılamaz. +İşareti kullanmalı mıyım ?

Yanıtlar:


138

Dize Şablonları / Enterpolasyon

Kotlin'de, Dize enterpolasyonu / şablonları kullanarak birleştirebilirsiniz :

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

Çıktı şu şekilde olacaktır: Hello World

Veya StringBuilderaçıkça kullanarak birleştirebilirsiniz .

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

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

print(c)

Çıktı şu şekilde olacaktır: HelloWorld

Yeni Dize Nesnesi

Veya +/ plus()operatörünü kullanarak bitiştirebilirsiniz :

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

print(c)

Çıktı şu şekilde olacaktır: HelloWorld

  • Bu, yeni bir String nesnesi oluşturacaktır.

7
"+" operatörü artı () 'ya çevrilir, böylece yazabilirsiniz a.plus(b)veya a + baynı bayt kodu üretilir
D3xter

21
Bayt

@crgarridos, Bu, Kotlin için birleştirme için dize enterpolasyonunu kullanmanın, bir dizeye "Hello" + "Word"eklemek için StringBuilder kullanmak kadar performanslı olduğu anlamına someHelloStringBuilder.append("World")mı gelir?
Adam Hurwitz

1
dize enterpolasyonu, değişmez bir dizenin içindeki değişkenlerin çözümlenmesini ifade eder. teknik olarak evet.
crgarridos

23

kotlin.Stringbir plusyöntemi vardır:

a.plus(b)

Ayrıntılar için https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html adresine bakın.


3
+Operatör normaldir, tercüme operatör fonksiyonunu çağırarak değil plus ... Bu deyimsel değildir
Jayson Minard

neden böyle düşünüyorsun ?
incises

1
Sonucunuzu benim yaptığım gibi etkilemeyi unutmayın, a = a.plus(b)mesela
lorenzo

@lorenzo'nun yorumu, bu cevabın yukarıdaki çözümlere göre neden daha az tercih edildiğini açıklıyor. Birleştirme çoklu if ifadelerine bağlı olduğunda, ifadeler a'nın ekleme yönteminden plus()daha az pratiktir, StringBuilderie.
Panos Gr

10

Yukarıdaki kabul edilen yanıta katılıyorum, ancak bu yalnızca bilinen dize değerleri için iyidir. Dinamik dize değerleri için benim önerim burada.

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

Bu, dizelerin listesini ayırıcıyla birleştirmek için kullanışlıdır.


9

Evet, bir +işaret kullanarak birleştirebilirsiniz . Kotlin'in dize şablonları vardır, bu nedenle bunları şu şekilde kullanmak daha iyidir:

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

"$fn $ln" birleştirme için.

String.plus()Yöntemi bile kullanabilirsiniz .


+Operatör normaldir, tercüme operatör fonksiyonunu çağırarak değil plus ... Bu deyimsel değildir
Jayson Minard

+ 'Nın artı sürümünün neden deyimsel olmadığını düşündüğünüzü açıklayabilir misiniz?
incises

5

Bunu deneyin, bence bu, Kotlin'de dizeleri birleştirmenin doğal bir yolu:

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

println(result)

// you will see "ab" in console.

1
öyle buildString {yerinestringBuild {
arnonuem

@arnonuem Ben düzelttim (yapmakta özgür hissetmiş olmalısın).
Ellen Spertus

5

@Rhusfer cevabına benzer şekilde bunu yazdım. Bir grup grubunuz varsa EditTextve değerlerini birleştirmek istiyorsanız, yazabilirsiniz:

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

Birleştirmek istiyorsanız Map, şunu kullanın:

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

Concatenate için Bundle, kullanım

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

Anahtarları alfabetik sıraya göre sıralar.

Misal:

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

Kotlin Örneğinde dizeleri birleştirmenin çeşitli yolları vardır -

a = "Hello" , b= "World"
  1. + Operatörünü kullanma a+b

  2. plus()Operatörü kullanma

    a.plus(b)

Not - + dahili olarak yalnızca .plus () yöntemine dönüştürülür

Yukarıdaki 2 yöntemde, dizeler değişmez olduğu için yeni bir dizge nesnesi oluşturulur. mevcut dizeyi değiştirmek istersek, StringBuilder'ı kullanabiliriz.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.