String.equals în Kotlin

equals compară două texte (opțional fără să conteze literele mari); compareTo le compară alfabetic.

Sintaxă
fun String?.equals(other: String?, ignoreCase: Boolean = false): Boolean
fun String.compareTo(other: String, ignoreCase: Boolean = false): Int

Ce face String.equals

În Kotlin, a == b compară conținutul textelor (apelează equals), nu adresa din memorie ca în Java. Funcția equals se scrie explicit mai ales pentru ignoreCase = true: "ANA".equals("ana", ignoreCase = true) este true.

a.compareTo(b) returnează un număr negativ dacă a este înaintea lui b în ordine, 0 dacă sunt egale și un număr pozitiv dacă a este după. Operatorii < și > pe texte folosesc tot compareTo.

Ordinea este după codul caracterelor: toate literele mari sunt înaintea celor mici, iar literele cu diacritice (ă, ș) sunt după z. Pentru o ordonare alfabetică românească corectă folosește java.text.Collator.

Parametri

Parametru Descriere
other Textul cu care se compară.
ignoreCase Dacă true, literele mari și mici sunt considerate egale.

Ce returnează

equals: Boolean. compareTo: Int (negativ, 0 sau pozitiv).

Exemple

Exemplul 1: == și equals cu ignoreCase

== ține cont de literele mari. Cu ignoreCase = true, „IAȘI” și „iași” sunt egale.

fun main() {
    val a = "Iași"
    val b = "IAȘI"
    println(a == b)
    println(a.equals(b, ignoreCase = true))
    println(a == "Ia" + "și")
}

Rezultat

false
true
true

Exemplul 2: compareTo și operatorii < >

„Ana” este înaintea lui „Ion”, deci rezultatul este negativ. Literele mari vin înaintea celor mici, de aceea „Zebra” < „ana”.

fun main() {
    println("Ana".compareTo("Ion"))
    println("Ion".compareTo("Ana"))
    println("Ana".compareTo("Ana"))
    println("Zebra" < "ana")
    println("Zebra".compareTo("ana", ignoreCase = true) > 0)
}

Rezultat

-8
8
0
true
true

Exemplul 3: Sortare românească cu Collator

sorted() pune „Ștefan” la final (după „Vlad”), pentru că Ș are cod mai mare decât V. Collator pentru limba română îl pune după „Sorin”.

import java.text.Collator
import java.util.Locale

fun main() {
    val nume = listOf("Vlad", "Ștefan", "Sorin", "Ana", "Țicu")
    println(nume.sorted())
    val ro = Collator.getInstance(Locale.forLanguageTag("ro-RO"))
    println(nume.sortedWith(ro))
}

Rezultat

[Ana, Sorin, Vlad, Ștefan, Țicu]
[Ana, Sorin, Ștefan, Țicu, Vlad]

Greșeli frecvente

  • Scrii a.equals(b) din obișnuința Java. În Kotlin a == b face același lucru și funcționează și cu null.
  • Folosești === pentru texte. Operatorul acesta verifică dacă este același obiect, nu același conținut.
  • Sortezi nume românești cu sorted() și te miri că Ș și Ț ajung la final. Folosește un Collator pentru limba română.

Comenzi înrudite

  • Comparable.compareTo: compareTo compară două obiecte și dă un număr negativ, 0 sau pozitiv; compareValues face la fel și acceptă null.
  • String.uppercase: uppercase transformă textul în majuscule, lowercase în litere mici, independent de limba sistemului.
  • compareBy: Creează un Comparator care compară obiectele după una sau mai multe proprietăți, în ordine; se folosește cu sortedWith.