Kotlin - Come concatenare correttamente una stringa


90

Una domanda molto semplice, qual è il modo giusto per concatenare una stringa in Kotlin?

In Java useresti il concat()metodo, ad es

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

La concat()funzione non è disponibile per Kotlin però. Devo usare il +segno?

Risposte:


139

Modelli di stringa / interpolazione

In Kotlin, puoi concatenare usando l' interpolazione / modelli di stringhe :

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

L'output sarà: Hello World

Oppure puoi concatenare usando StringBuilderesplicitamente.

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

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

print(c)

L'output sarà: HelloWorld

Nuovo oggetto stringa

Oppure puoi concatenare usando l' operatore +/ plus():

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

print(c)

L'output sarà: HelloWorld

  • Questo creerà un nuovo oggetto String.

7
l'operatore "+" viene tradotto in plus (), quindi puoi scrivere a.plus(b)o a + be viene generato lo stesso bytecode
D3xter

21
Ho esaminato il bytecode e l'interpolazione delle stringhe utilizza StringBuilder internamente
crgarridos

@crgarridos, sarebbe questo mezzo che per Kotlin utilizzando l'interpolazione di stringa per la concatenazione "Hello" + "Word"è altrettanto performante da utilizzare StringBuilder per aggiungere una stringa, someHelloStringBuilder.append("World")?
Adam Hurwitz

1
l'interpolazione di stringhe si riferisce alla risoluzione delle variabili all'interno di una stringa letterale. quindi tecnicamente sì.
crgarridos

23

kotlin.Stringha un plusmetodo:

a.plus(b)

Vedi https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html per i dettagli.


3
L' +operatore è normale, non chiama la funzione operatore tradotto plus ... questo non è idiomatico
Jayson Minard

perchè la pensi così ?
incide il

1
Non dimenticare di influenzare il tuo risultato come ho fatto io, come a = a.plus(b)ad esempio
lorenzo

Il commento di @lorenzo spiega perché questa risposta è meno preferibile alle soluzioni sopra. Quando la concatenazione dipende da più istruzioni if plus()è meno pratico del StringBuildermetodo append di a, ad es.
Panos Gr

10

Sono d'accordo con la risposta accettata sopra, ma va bene solo per i valori di stringa noti. Per i valori di stringa dinamici ecco il mio suggerimento.

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

Questo è utile per concatenare un elenco di stringhe con separatore.


9

Sì, puoi concatenare usando un +segno. Kotlin ha modelli di stringhe, quindi è meglio usarli come:

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

"$fn $ln" per la concatenazione.

Puoi anche usare il String.plus()metodo.


L' +operatore è normale, non chiama la funzione operatore tradotto plus ... questo non è idiomatico
Jayson Minard

Potresti spiegare perché pensi che la versione plus di + non sia idiomatica?
incide il

5

Prova questo, penso che questo sia un modo nativo per concatenare le stringhe in Kotlin:

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

println(result)

// you will see "ab" in console.

1
è buildString {invece distringBuild {
arnonuem

@arnonuem l'ho risolto (come avresti dovuto sentirti libero di fare).
Ellen Spertus

5

Simile alla risposta di @Rhusfer, ho scritto questo. Nel caso in cui tu abbia un gruppo di se EditTextdesideri concatenarne i valori, puoi scrivere:

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

Se vuoi concatenare Map, usa questo:

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

Per concatenare Bundle, usa

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

Ordina i tasti in ordine alfabetico.

Esempio:

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

Esistono vari modi per concatenare le stringhe in kotlin Esempio:

a = "Hello" , b= "World"
  1. Utilizzo dell'operatore + a+b

  2. Utilizzo plus()dell'operatore

    a.plus(b)

Nota - + viene convertito internamente solo al metodo .plus ()

Nei due metodi precedenti, viene creato un nuovo oggetto stringa poiché le stringhe non sono modificabili. se vogliamo modificare la stringa esistente, possiamo usare StringBuilder

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

1

yourString + = "newString"

In questo modo puoi concatenare una stringa

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.