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 Kotlina == bface același lucru și funcționează și cunull. - 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 unCollatorpentru 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.