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.