Char.digitToInt în Kotlin

Caractere (Char) Kotlin 1.5

digitToInt transformă caracterul '7' în numărul 7; code dă codul Unicode al caracterului ('A'.code este 65).

Sintaxă
fun Char.digitToInt(): Int
fun Char.digitToIntOrNull(): Int?
val Char.code: Int
fun Int.toChar(): Char   // invers: Char(cod)

Ce face Char.digitToInt

'7'.digitToInt() returnează numărul 7. Dacă caracterul nu este cifră, aruncă IllegalArgumentException; digitToIntOrNull() returnează în schimb null. Există și varianta cu bază: 'f'.digitToInt(16) este 15.

code este o proprietate care dă codul Unicode al caracterului: 'A'.code este 65, 'a'.code este 97, iar '7'.code este 55, nu 7! Înapoi, din cod în caracter, mergi cu Char(65) sau 65.toChar().

digitToInt și code au înlocuit în Kotlin 1.5 vechiul toInt() pe Char, care era ușor de confundat.

Ce returnează

digitToInt: valoarea cifrei. code: codul Unicode (Int).

Exemple

Exemplul 1: Valoarea cifrei față de codul caracterului

Pentru '7', valoarea cifrei este 7, dar codul Unicode este 55.

fun main() {
    val c = '7'
    println(c.digitToInt())
    println(c.code)
    println('A'.code)
    println('ș'.code)
    println(Char(65))
}

Rezultat

7
55
65
537
A

Exemplul 2: Suma cifrelor unui număr

Parcurgem textul numărului și adunăm valoarea fiecărei cifre.

fun main() {
    val numar = "2990315226789"
    val suma = numar.sumOf { it.digitToInt() }
    println("Suma cifrelor: $suma")
    println('x'.digitToIntOrNull())
}

Rezultat

Suma cifrelor: 63
null

Exemplul 3: Cifrul lui Cezar

Mutăm fiecare literă cu 3 poziții: calculăm cu code, apoi revenim la caracter cu Char(...).

fun cezar(text: String, pas: Int): String = text.map { c ->
    if (c in 'a'..'z') Char('a'.code + (c.code - 'a'.code + pas) % 26) else c
}.joinToString("")

fun main() {
    val secret = cezar("ne vedem la noua", 3)
    println(secret)
    println(cezar(secret, 23))
}

Rezultat

qh yhghp od qrxd
ne vedem la noua

Greșeli frecvente

  • Folosești c.code pentru valoarea unei cifre și obții 55 în loc de 7. Pentru cifre folosește digitToInt().
  • Scrii c.toInt() din cod vechi. Este depreciat; alege între code și digitToInt() după ce ai nevoie.

Comenzi înrudite

  • Char.isDigit: Verifică tipul unui caracter: cifră (isDigit), literă (isLetter), literă sau cifră, spațiu alb (isWhitespace).
  • Int.toString: toString transformă un număr în text (opțional în altă bază, ca 2 sau 16); toChar dă caracterul cu acel cod.
  • String.toInt: Transformă un text în număr întreg; toInt aruncă excepție la text invalid, toIntOrNull returnează null.