Bird
Raised Fist0
Kotlinprogramming~5 mins

String comparison (equals, compareTo) in Kotlin

Choose your learning style10 modes available
Introduction

We compare strings to check if they are the same or to find their order. This helps us decide if two words match or which one comes first.

Checking if a user typed the correct password.
Sorting a list of names alphabetically.
Finding if two words are exactly the same in a game.
Comparing input text to a stored value.
Deciding which string should appear first in a list.
Syntax
Kotlin
val resultEquals: Boolean = string1.equals(string2)
val resultCompare: Int = string1.compareTo(string2)

equals() returns true if strings are exactly the same.

compareTo() returns 0 if strings are equal, a negative number if the first string comes before the second, and a positive number if it comes after.

Examples
Checks if two strings are exactly the same.
Kotlin
val a = "apple"
val b = "apple"
println(a.equals(b))  // true
Since "apple" comes before "banana", compareTo returns a negative number.
Kotlin
val a = "apple"
val b = "banana"
println(a.compareTo(b))  // negative number
equals() is case sensitive. compareTo() also considers case when comparing.
Kotlin
val a = "apple"
val b = "Apple"
println(a.equals(b))  // false
println(a.compareTo(b))  // positive or negative depending on case
Sample Program

This program compares strings using equals() and compareTo(). It shows how case affects the results.

Kotlin
fun main() {
    val word1 = "Kotlin"
    val word2 = "kotlin"
    val word3 = "Kotlin"

    println("word1 equals word2: ${word1.equals(word2)}")
    println("word1 equals word3: ${word1.equals(word3)}")

    println("word1 compareTo word2: ${word1.compareTo(word2)}")
    println("word2 compareTo word1: ${word2.compareTo(word1)}")
    println("word1 compareTo word3: ${word1.compareTo(word3)}")
}
OutputSuccess
Important Notes

equals() is case sensitive. Use equalsIgnoreCase() if you want to ignore case.

compareTo() returns an integer showing order, not just true or false.

Negative result means first string is before second; positive means after.

Summary

Use equals() to check if two strings are exactly the same.

Use compareTo() to find the order between two strings.

Both methods consider uppercase and lowercase letters as different.

Practice

(1/5)
1. Which Kotlin method should you use to check if two strings have exactly the same characters and case?
val a = "Hello"
val b = "hello"
easy
A. a.equals(b)
B. a.compareTo(b)
C. a === b
D. a.equals(b, ignoreCase = true)

Solution

  1. Step 1: Understand equals() method

    The equals() method checks if two strings are exactly the same including case.
  2. Step 2: Compare equals() with other options

    compareTo() returns an order number, === checks reference equality (not content), equals(ignoreCase=true) ignores case, so only equals() matches exact case-sensitive check.
  3. Final Answer:

    a.equals(b) -> Option A
  4. Quick Check:

    Use equals() for exact string match [OK]
Hint: Use equals() for exact case-sensitive string match [OK]
Common Mistakes:
  • Using compareTo() to check equality
  • Assuming === checks content equality
  • Using equals(ignoreCase=true) when case matters
2. Which of the following is the correct syntax to compare two strings str1 and str2 for equality ignoring case in Kotlin?
easy
A. str1.equals(str2, ignoreCase = true)
B. str1.compareTo(str2, ignoreCase = true)
C. str1.equals(str2)
D. str1 == str2

Solution

  1. Step 1: Recall equals() with ignoreCase parameter

    In Kotlin, equals() can take ignoreCase=true to compare strings ignoring case differences.
  2. Step 2: Check other options

    A: equals() without ignoreCase is case-sensitive, B: compareTo(ignoreCase=true) returns Int not Boolean, D: == is case-sensitive.
  3. Final Answer:

    str1.equals(str2, ignoreCase = true) -> Option A
  4. Quick Check:

    Use equals(ignoreCase=true) to ignore case [OK]
Hint: Use equals(ignoreCase=true) to compare ignoring case [OK]
Common Mistakes:
  • Using compareTo(ignoreCase=true) directly (returns Int, not Boolean)
  • Using == which is case-sensitive
  • Forgetting to set ignoreCase=true
3. What will be the output of the following Kotlin code?
val s1 = "apple"
val s2 = "banana"
println(s1.compareTo(s2))
medium
A. A positive number
B. A negative number
C. 0
D. Compilation error

Solution

  1. Step 1: Understand compareTo() behavior

    compareTo() returns a negative number if the first string is lexicographically less than the second.
  2. Step 2: Compare "apple" and "banana" lex order

    "apple" comes before "banana" alphabetically, so compareTo returns a negative number.
  3. Final Answer:

    A negative number -> Option B
  4. Quick Check:

    "apple" < "banana" means compareTo() < 0 [OK]
Hint: compareTo() < 0 means first string is before second [OK]
Common Mistakes:
  • Assuming compareTo() returns boolean
  • Confusing positive and negative return values
  • Thinking compareTo() returns 0 for different strings
4. The following Kotlin code is intended to check if two strings are equal ignoring case, but it does not compile. What is the error?
val a = "Test"
val b = "test"
if (a.compareTo(b, ignoreCase = true)) {
println("Equal")
} else {
println("Not Equal")
}
medium
A. Missing parentheses in if condition
B. ignoreCase is not a valid parameter for compareTo()
C. Strings cannot be compared with compareTo()
D. compareTo() returns Int, cannot be used as Boolean

Solution

  1. Step 1: Check compareTo() return type

    compareTo() returns an Int, not a Boolean, so it cannot be used directly in if condition.
  2. Step 2: Understand how to check equality with compareTo()

    To check equality ignoring case, compareTo() == 0 should be used, not just compareTo() alone.
  3. Final Answer:

    compareTo() returns Int, cannot be used as Boolean -> Option D
  4. Quick Check:

    compareTo() returns Int, use == 0 to check equality [OK]
Hint: compareTo() returns Int; compare with 0 for equality [OK]
Common Mistakes:
  • Using compareTo() directly as Boolean
  • Forgetting to compare result with 0
  • Assuming ignoreCase is invalid parameter (it is valid)
5. You want to sort a list of strings ignoring case in Kotlin. Which code snippet correctly sorts the list val fruits = listOf("Banana", "apple", "Cherry") ignoring case?
hard
A. fruits.sortedBy { it }
B. fruits.sortedBy(String.CASE_INSENSITIVE_ORDER)
C. fruits.sortedWith(String.CASE_INSENSITIVE_ORDER)
D. fruits.sorted()

Solution

  1. Step 1: Understand sorting ignoring case

    To sort strings ignoring case, use a comparator that compares strings case-insensitively.
  2. Step 2: Check options for case-insensitive sorting

    A and D are case-sensitive. C: sortedBy expects key selector, not Comparator (compile error). B uses built-in case-insensitive Comparator correctly.
  3. Final Answer:

    fruits.sortedWith(String.CASE_INSENSITIVE_ORDER) -> Option C
  4. Quick Check:

    Use sortedWith(String.CASE_INSENSITIVE_ORDER) for case-insensitive sort [OK]
Hint: Use sortedWith(String.CASE_INSENSITIVE_ORDER) to ignore case in sort [OK]
Common Mistakes:
  • Using sorted() which is case-sensitive
  • Using sortedBy { it } which is case-sensitive
  • Confusing sortedBy (selector) with sortedWith (Comparator)
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard