Question or issue of Kotlin Programming:
A very basic question, what is the right way to concatenate a String in Kotlin?
In Java you would use the concat() method, e.g.
String a = "Hello "; String b = a.concat("World"); // b = Hello World
The concat() function isn’t available for Kotlin though. Should I use the + sign?
How to solve this issue?
Solution no. 1:
String Templates/Interpolation
In Kotlin, you can concatenate using String interpolation/templates:
val a = "Hello" val b = "World" val c = "$a $b"
The output will be: Hello World
- The compiler uses
StringBuilder
for String templates which is the most efficient approach in terms of memory because+
/plus()
creates new String objects.
Or you can concatenate using the StringBuilder
explicitly.
val a = "Hello" val b = "World" val sb = StringBuilder() sb.append(a).append(b) val c = sb.toString() print(c)
The output will be: HelloWorld
New String Object
Or you can concatenate using the +
/ plus()
operator:
val a = "Hello" val b = "World" val c = a + b // same as calling operator function a.plus(b) print(c)
The output will be: HelloWorld
- This will create a new String object.
Solution no. 2:
kotlin.String
has a plus
method:
a.plus(b)
See https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/plus.html for details.
Solution no. 3:
I agree with the accepted answer above but it is only good for known string values.
For dynamic string values here is my suggestion.
// A list may come from an API JSON like { "names": [ "Person 1", "Person 2", "Person 3", ... "Person N" ] } var listOfNames = mutableListOf() 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
This is useful for concatenating list of strings with separator.
Solution no. 4:
Yes, you can concatenate using a +
sign. Kotlin has string templates, so it's better to use them like:
var fn = "Hello" var ln = "World"
"$fn $ln"
for concatenation.
You can even use String.plus()
method.
Solution no. 5:
Try this, I think this is a natively way to concatenate strings in Kotlin:
val result = buildString{ append("a") append("b") } println(result) // you will see "ab" in console.
Solution no. 6:
Similar to @Rhusfer answer I wrote this. In case you have a group of EditText
s and want to concatenate their values, you can write:
listOf(edit_1, edit_2, edit_3, edit_4).joinToString(separator = "") { it.text.toString() }
If you want to concatenate Map
, use this:
map.entries.joinToString(separator = ", ")
To concatenate Bundle
, use
bundle.keySet().joinToString(", ") { key -> "$key=${bundle[key]}" }
It sorts keys in alphabetical order.
Example:
val map: MutableMap = 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
Solution no. 7:
There are various way to concatenate strings in kotlin
Example -
a = "Hello" , b= "World"
-
Using + operator
a+b
-
Using
plus()
operatora.plus(b)
Note - + is internally converted to .plus() method only
In above 2 methods, a new string object is created as strings are immutable. if we want to modify the existing string, we can use StringBuilder
StringBuilder str = StringBuilder("Hello").append("World")
Solution no. 8:
yourString += "newString"
This way you can concatenate a string