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?

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


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.


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.


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.


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

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.

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")

1

yourString + = "newString"

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.