Bird
Raised Fist0
Kotlinprogramming~20 mins

String comparison (equals, compareTo) in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
String Comparison Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Kotlin code comparing strings with equals()?
Consider the following Kotlin code snippet. What will it print?
Kotlin
fun main() {
    val a = "Hello"
    val b = "hello"
    println(a.equals(b))
    println(a.equals(b, ignoreCase = true))
}
Atrue\ntrue
Bfalse\ntrue
Cfalse\nfalse
Dtrue\nfalse
Attempts:
2 left
💡 Hint
Remember that equals() is case-sensitive by default unless ignoreCase is true.
❓ Predict Output
intermediate
2:00remaining
What does compareTo() return when comparing "apple" and "banana"?
What is the output of this Kotlin code?
Kotlin
fun main() {
    val result = "apple".compareTo("banana")
    println(result)
}
AA negative number less than -1
B0
C1
D-1
Attempts:
2 left
💡 Hint
compareTo returns a negative number if the first string is lexicographically less than the second.
🔧 Debug
advanced
2:00remaining
What error does this Kotlin code produce?
Examine this Kotlin code and identify the error it causes.
Kotlin
fun main() {
    val s1: String = null
    val s2 = "test"
    println(s1.equals(s2))
}
APrints false without error
BRuntimeException: NullPointerException
CCompilation error: Unresolved reference: equals
DCompilation error: Null can not be a value of a non-null type String
Attempts:
2 left
💡 Hint
In Kotlin, variables must be declared nullable to hold null.
❓ Predict Output
advanced
2:00remaining
What is the output of this Kotlin code using compareTo with ignoreCase?
What will this Kotlin program print?
Kotlin
fun main() {
    val s1 = "Kotlin"
    val s2 = "kotlin"
    println(s1.compareTo(s2, ignoreCase = true))
    println(s1.compareTo(s2))
}
A-32\n0
B0\n32
C0\n-32
D32\n0
Attempts:
2 left
💡 Hint
compareTo returns 0 if strings are equal ignoring case, otherwise a positive or negative number.
🧠 Conceptual
expert
2:00remaining
How many items are in the resulting map after this Kotlin code?
What is the size of the map produced by this Kotlin code?
Kotlin
fun main() {
    val keys = listOf("a", "A", "b", "B")
    val map = keys.associateWith { it.lowercase() }
    val filteredMap = map.filterKeys { it.equals(it.lowercase(), ignoreCase = true) }
    println(filteredMap.size)
}
A4
B2
C3
D1
Attempts:
2 left
💡 Hint
Check which keys equal their lowercase version ignoring case.

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