Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 19, 2024
String is one of the most commonly used data types in Kotlin. Therefore, manipulating strings is a fundamental operation in our daily programming.
In this quick tutorial, we’ll explore various approaches to removing the first character from a string in Kotlin.
Strings are immutable in Java and Kotlin. Therefore, we cannot in-place remove characters from a string object. In other words, we aim to obtain a new string object to hold the required result when we discuss removing the first character from a string.
In this tutorial, we’ll address different solutions to do the job. Furthermore, we’ll discuss these solutions’ behavior in a corner case: when the string is empty.
For simplicity, we’ll use unit test assertions to verify whether each approach works as expected.
Kotlin offers a series of convenient String extensions. For example, the drop(n) function can remove the first n characters from a string.
Therefore, if we only want to remove the first character, we can pass 1 to drop():
val myStr = "0a b c d e"
val result = myStr.drop(1)
assertEquals("a b c d e", result)
It’s worth noting that the string.drop(1) approach works with empty strings as well:
val result2 = "".drop(1)
assertEquals("", result2)
If we’ve removed the first character from a string, the result is the same as we get the substring of the input from the second character. Therefore, we can also leverage the substring() method to solve the problem:
val myStr = "0a b c d e"
val result = myStr.substring(1)
assertEquals("a b c d e", result)
As the test above shows, we passed 1 to substring() since it’s the second character’s index.
However, this approach throws IndexOutOfBoundsException if the input string is empty:
//throw exception when the string is empty
assertThrows<IndexOutOfBoundsException> {
"".substring(1)
}
Similar to substring(), Kotlin’s takeLast() function returns a substring of the input. However, takeLast(n) takes the last n characters from the input string. For example, “123”.takeLast(2) returns “23”. Therefore, if we want to exclude the first character, takeLast(input.length – 1) solves the problem:
val myStr = "0a b c d e"
val result = myStr.takeLast(myStr.length - 1) // or takeLast(myStr.lastIndex)
assertEquals("a b c d e", result)
Alternatively, we can pass myStr.lastIndex to the takeLast() function since string.lastIndex has the same value as string.length – 1:
public val CharSequence.lastIndex: Int
get() = this.length - 1
But this approach raises IllegalArgumentException if the string is empty:
val myEmpty = ""
assertThrows<IllegalArgumentException> {
myEmpty.takeLast(myEmpty.length - 1)
}.also {
assertEquals("Requested character count -1 is less than zero.", it.message)
}
Another technique to remove characters from a string is the regex-based approach. For example, we can use the replace() function to solve the problem:
val myStr = "0a b c d e"
val result = myStr.replace("^.".toRegex(), "")
assertEquals("a b c d e", result)
The regex pattern “^.” matches the first character, so we use replace() to replace the first character with an empty string.
As the regex-based solution isn’t dependent on the character’s index, it works even if the string is empty:
val result2 = "".replace("^.".toRegex(), "")
assertEquals("", result2)
In this article, we explored several methods to remove the first character from a string in Kotlin. Also, we discussed how these solutions behave if the input string is empty.