Kotlin - Cómo concatenar correctamente una cadena


89

Una pregunta muy básica, ¿cuál es la forma correcta de concatenar una cadena en Kotlin?

En Java, usaría el concat()método, por ejemplo

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

Sin concat()embargo, la función no está disponible para Kotlin. ¿Debería usar el +letrero?

Respuestas:


137

En Kotlin, puede concatenar mediante interpolación de cadenas / plantillas :

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

La salida será: Hello World

O puede concatenar usando el operador +/ plus():

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

print(c)

La salida será: HelloWorld

O puede concatenar usando el StringBuilder.

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

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

print(c)

La salida será: HelloWorld


6
el operador "+" se traduce en más (), por lo que puede escribir a.plus(b)o a + by se genera el mismo bytecode
D3xter

21
Miré el
código de bytes

@crgarridos, ¿significaría esto que para Kotlin usar la interpolación de cadenas para la concatenación "Hello" + "Word"es tan eficaz como usar StringBuilder para agregar una cadena someHelloStringBuilder.append("World"),?
Adam Hurwitz

1
La interpolación de cadenas se refiere a la resolución de variables dentro de una cadena literal. así que técnicamente sí.
crgarridos

22

kotlin.Stringtiene un plusmétodo:

a.plus(b)

Consulte https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html para obtener más detalles.


3
El +operador es normal, no llama a la función de operador traducida plus ... esto no es idiomático
Jayson Minard

Por qué piensas eso ?
incide

1
No olvides afectar tu resultado como lo hice yo, como a = a.plus(b)por ejemplo
lorenzo

El comentario de @lorenzo explica por qué esta respuesta es menos preferible a las soluciones anteriores. Cuando la concatenación depende de múltiples declaraciones if plus()es menos práctico que StringBuilderel método de adición de a, es decir.
Panos Gr

9

Sí, puede concatenar mediante un +signo. Kotlin tiene plantillas de cadenas, por lo que es mejor usarlas como:

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

"$fn $ln" para la concatenación.

Incluso puedes usar el String.plus()método.


El +operador es normal, no llama a la función de operador traducida plus ... esto no es idiomático
Jayson Minard

¿Podría explicar por qué cree que la versión plus de + no es idiomática?
incide

9

Estoy de acuerdo con la respuesta aceptada anterior, pero solo es buena para valores de cadena conocidos. Para valores de cadena dinámicos, aquí está mi sugerencia.

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

Esto es útil para concatenar listas de cadenas con separador.


5

Similar a la respuesta de @Rhusfer , escribí esto. En caso de que tenga un grupo de EditTextsy desee concatenar sus valores, puede escribir:

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

Si desea concatenar HashMap, use esto:

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

5

Pruebe esto, creo que esta es una forma nativa de concatenar cadenas en Kotlin:

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

println(result)

// you will see "ab" in console.

1
es en buildString {lugar destringBuild {
arnonuem

@arnonuem Lo he arreglado (como deberías haberte sentido libre de hacer).
Ellen Spertus

2

Hay varias formas de concatenar cadenas en el ejemplo de kotlin:

a = "Hello" , b= "World"
  1. Usando + operador a+b

  2. plus()Operador de uso

    a.plus(b)

Nota - + se convierte internamente al método .plus () solamente

En los 2 métodos anteriores, se crea un nuevo objeto de cadena ya que las cadenas son inmutables. si queremos modificar la cadena existente, podemos usar StringBuilder

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.