Kotlin String
Strings are a sequence of characters. For example, "Hello there!"
is a string literal.
In Kotlin, all strings are objects of String
class. Meaning, string literals such as "Hello there!"
are implemented as instances of this class.
How to create a String variable?
Here is how you can define a String
variable in Kotlin. For example,
val myString = "Hey there!"
Here, myString is a variable of type String
.
You can declare variable of type String
and specify its type in one statement, and initialize the variable in another statement later in the program.
val myString: String ... .. ... myString = "Howdy"
How to access characters of a String?
To access elements (character) of a string, index access operator is used. For example,
val myString = "Hey there!" val item = myString[2]
Here, item variable contains y, third character of the myString string. It's because indexing in Kotlin starts from 0 not 1.
val myString = "Hey there!" var item: Char item = myString[0] // item contains 'H' item = myString[9] // item contains '!' item = myString[10] // Error! String index is out of range item = myString[-1] // Error! String index is out of range
Example: Iterate through a String
If you need to iterate through elements of a string, you can do it easily by using a for loop.
fun main(args: Array<String>) {
val myString = "Hey!"
for (item in myString) {
println(item)
}
}
When you run the program, the output will be:
H
e
y
!
Strings in Kotlin are Immutable
Like Java, strings are immutable in Kotlin. This means, you cannot change individual character of a string. For example,
var myString = "Hey!" myString[0] = 'h' // Error! Strings
However, you can reassign a string variable again if you declared the variable using keyword var
. (Recommended Reading: Kotlin var Vs val)
Example: Reassigning a String Variable.
fun main(args: Array<String>) {
var myString = "Hey!"
println("myString = $myString")
myString = "Hello!"
println("myString = $myString")
}
When you run the program, the output will be:
myString = Hey! myString = Hello!
String Literals
A literal is the source code representation of a fixed value. For example, "Hey there!"
is a string literal that appears directly in a program without requiring computation (like variables).
There are two types of string literals in Kotlin:
1. Escaped string
A escaped string may have escaped characters in them. For example,
val myString = "Hey there!\n"
Here, \n
is an escape character which inserts a newline in the text where it appears.
Here is a list of escape characters supported in Kotlin:
\t
- Inserts tab\b
- Inserts backspace\n
- Inserts newline\r
- Inserts carriage return\'
- Inserts single quote character\"
- Inserts double quote character\\
- Inserts backslash\$
- Inserts dollar character
2. Raw String
A raw string can contain newlines (not new line escape character) and arbitrary text. A raw string is delimited by a triple quote """
. For example,
fun main(args: Array<String>) {
val myString = """
for (character in "Hey!")
println(character)
"""
print(myString)
}
When you run the program, the output will be:
for (character in "Hey!") println(character)
You can remove the leading whitespaces of a raw string using trimMargin() function. For example,
Example: Printing Raw String
fun main(args: Array<String>) {
println("Output without using trimMargin function:")
val myString = """
|Kotlin is interesting.
|Kotlin is sponsored and developed by JetBrains.
"""
println(myString)
println("Output using trimMargin function:\n")
println(myString.trimMargin())
}
When you run the program, the output will be:
Output without using trimMargin function: |Kotlin is interesting. |Kotlin is sponsored and developed by JetBrains. Output using trimMargin function: Kotlin is interesting. Kotlin is sponsored and developed by JetBrains.
By default, trimMargin()
function uses | as margin prefix. However, you can change it by passing a new string to this function.
Example: trimMargin() with Argument
fun main(args: Array<String>) {
val myString = """
!!! Kotlin is interesting.
!!! Kotlin is sponsored and developed by JetBrains.
"""
println(myString.trimMargin("!!! "))
}
When you run the program, the output will be:
Kotlin is interesting. Kotlin is sponsored and developed by JetBrains.
Kotlin String Templates
Kotlin has an awesome feature called string templates that allows strings to contain template expressions.
A string template expression starts with a dollar sign $
. Here are few examples:
Example: Kotlin String Template
fun main(args: Array<String>) {
val myInt = 5;
val myString = "myInt = $myInt"
println(myString)
}
When you run the program, the output will be:
myInt = 5
It is because the expression $myInt (expression starting with $ sign) inside the string is evaluated and concatenated into the string.
Example: String Template With Raw String
fun main(args: Array<String>) {
val a = 5
val b = 6
val myString = """
|${if (a > b) a else b}
"""
println("Larger number is: ${myString.trimMargin()}")
}
When you run the program, the output will be:
Larger number is: 6
Few String Properties and Functions
Since literals in Kotlin are implemented as instances of String
class, you can use several methods and properties of this class.
length
property - returns the length of character sequence of an string.compareTo
function - compares this String (object) with the specified object. Returns 0 if the object is equal to the specfied object.get
function - returns character at the specified index.
You can use index access operator instead ofget
function as index access operator internally callsget
function.plus
function - returns a new string which is obtained by the concatenation of this string and the string passed to this function.
You can use+
operator instead ofplus
function as+
operator callsplus
function under the hood.subSequence
Function - returns a new character sequence starting at the specified start and end index.
Example: String Properties and Function
fun main(args: Array<String>) {
val s1 = "Hey there!"
val s2 = "Hey there!"
var result: String
println("Length of s1 string is ${s1.length}.")
result = if (s1.compareTo(s2) == 0) "equal" else "not equal"
println("Strings s1 and s2 are $result.")
// s1.get(2) is equivalent to s1[2]
println("Third character is ${s1.get(2)}.")
result = s1.plus(" How are you?") // result = s1 + " How are you?"
println("result = $result")
println("Substring is \"${s1.subSequence(4, 7)}\"")
}
When you run the program, the output is:
Length of s1 string is 10. Strings s1 and s2 are equal. Third character is y. result = Hey there! How are you? Substring is "the"
Visit Kotlin String class for more information on extension properties, extension, functions and constructors.