Kotlin - Comment concaténer correctement une chaîne

90

Une question très basique, quelle est la bonne façon de concaténer une chaîne dans Kotlin?

En Java, vous utiliseriez la concat()méthode, par exemple

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

La concat()fonction n'est cependant pas disponible pour Kotlin. Dois-je utiliser le +signe?

Daniele
la source

Réponses:

138

Dans Kotlin, vous pouvez concaténer à l'aide d' une interpolation / modèles de chaînes :

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

La sortie sera: Hello World

Ou vous pouvez concaténer à l'aide de l' opérateur +/ plus():

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

print(c)

La sortie sera: HelloWorld

Ou vous pouvez concaténer en utilisant le StringBuilder.

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

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

print(c)

La sortie sera: HelloWorld

Avijit Karmakar
la source
6
l'opérateur "+" est traduit en plus (), vous pouvez donc écrire a.plus(b)ou a + bet le même bytecode est généré
D3xter
21
J'ai examiné le bytecode et l'interpolation de chaîne utilise StringBuilder en interne
crgarridos
@crgarridos, cela signifierait-il que pour Kotlin, l'utilisation de l'interpolation de chaîne pour la concaténation "Hello" + "Word"est tout aussi performante que l'utilisation de StringBuilder pour ajouter à une chaîne someHelloStringBuilder.append("World"),?
Adam Hurwitz le
1
l'interpolation de chaîne fait référence à la résolution de variables à l'intérieur d'une chaîne littérale. donc techniquement oui.
crgarridos le
22

kotlin.Stringa une plusméthode:

a.plus(b)

Voir https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html pour plus de détails.

Harald Gliebe
la source
3
L' +opérateur est normal, n'appelant pas la fonction d'opérateur traduit plus ... ce n'est pas idiomatique
Jayson Minard
Pourquoi penses-tu ça ?
incise le
1
N'oubliez pas d'affecter votre résultat comme je l'ai fait, comme a = a.plus(b)par exemple
lorenzo
Le commentaire de @lorenzo explique pourquoi cette réponse est moins préférable aux solutions ci-dessus. Lorsque la concaténation dépend de multiples si les instructions plus()sont moins pratiques que StringBuilderla méthode d 'append d'.
Panos Gr
9

Oui, vous pouvez concaténer à l'aide d'un +signe. Kotlin a des modèles de chaînes, il est donc préférable de les utiliser comme:

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

"$fn $ln" pour la concaténation.

Vous pouvez même utiliser la String.plus()méthode.

Tushar
la source
L' +opérateur est normal, n'appelant pas la fonction d'opérateur traduit plus ... ce n'est pas idiomatique
Jayson Minard
Pouvez-vous expliquer pourquoi vous pensez que la version plus de + n'est pas idiomatique?
incise le
9

Je suis d'accord avec la réponse acceptée ci-dessus, mais elle n'est bonne que pour les valeurs de chaîne connues. Pour les valeurs de chaîne dynamiques, voici ma suggestion.

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

Ceci est utile pour concaténer une liste de chaînes avec séparateur.

Rhusfer
la source
5

Similaire à la réponse @Rhusfer, j'ai écrit ceci. Si vous avez un groupe de EditTexts et souhaitez concaténer leurs valeurs, vous pouvez écrire:

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

Si vous souhaitez concaténer HashMap, utilisez ceci:

map.entries.joinToString(separator = ", ")
// Result:
// id=123, name=John, surname=Smith
CoolMind
la source
5

Essayez ceci, je pense que c'est un moyen natif de concaténer des chaînes dans Kotlin:

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

println(result)

// you will see "ab" in console.
Licat Julius
la source
1
c'est buildString {au lieu destringBuild {
arnonuem le
@arnonuem je l'ai corrigé (comme vous auriez dû vous sentir libre de le faire).
Ellen Spertus le
2

Il existe différentes manières de concaténer des chaînes dans kotlin Exemple -

a = "Hello" , b= "World"
  1. Utilisation de l'opérateur + a+b

  2. Utilisation de l' plus()opérateur

    a.plus(b)

Remarque - + est converti en interne en méthode .plus () uniquement

Dans les 2 méthodes ci-dessus, un nouvel objet chaîne est créé car les chaînes sont immuables. si nous voulons modifier la chaîne existante, nous pouvons utiliser StringBuilder

StringBuilder str = StringBuilder("Hello").append("World")
Shradha Sangtani
la source
1

yourString + = "newString"

De cette façon, vous pouvez concaténer une chaîne

Kanagalingam
la source