String.toInt în Kotlin

Text: conversii și formatare Kotlin 1.0 (toIntOrNull: 1.1)

Transformă un text în număr întreg; toInt aruncă excepție la text invalid, toIntOrNull returnează null.

Sintaxă
fun String.toInt(): Int
fun String.toInt(radix: Int): Int
fun String.toIntOrNull(): Int?
fun String.toLong(): Long

Ce face String.toInt

"42".toInt() returnează numărul 42. Textul trebuie să conțină doar cifre, eventual cu semnul - sau + în față. Spațiile, virgulele sau literele fac conversia să eșueze cu NumberFormatException.

toIntOrNull() face aceeași conversie, dar returnează null în loc să arunce excepție. Este alegerea potrivită pentru date introduse de utilizator: o combini cu operatorul Elvis, text.toIntOrNull() ?: 0.

Int ține valori până la aproximativ 2,1 miliarde. Pentru numere mai mari (CNP, sume în bani, milisecunde) folosește toLong() sau toLongOrNull(). Cu argumentul radix citești numere în altă bază: "ff".toInt(16) este 255.

Parametri

Parametru Descriere
radix Opțional: baza de numerație (2–36). Implicit 10.

Ce returnează

Int / Long; toIntOrNull returnează Int?.

Exemple

Exemplul 1: Conversii reușite și baze de numerație

Semnul minus este acceptat. radix schimbă baza: 1010 în baza 2 este 10.

fun main() {
    println("42".toInt() + 8)
    println("-15".toInt())
    println("1010".toInt(2))
    println("ff".toInt(16))
    println("9876543210".toLong())
}

Rezultat

50
-15
10
255
9876543210

Exemplul 2: toIntOrNull pentru date nesigure

Valorile care nu sunt numere devin null, iar Elvis (?:) le înlocuiește cu 0.

fun main() {
    val introduse = listOf("10", "abc", " 7", "9", "")
    for (t in introduse) {
        val n = t.toIntOrNull()
        println("\"$t\" -> $n")
    }
    val suma = introduse.sumOf { it.toIntOrNull() ?: 0 }
    println("Suma numerelor valide: $suma")
}

Rezultat

"10" -> 10
"abc" -> null
" 7" -> null
"9" -> 9
"" -> null
Suma numerelor valide: 19

Exemplul 3: Excepția lui toInt

Un text invalid oprește programul cu NumberFormatException, dacă nu o prinzi cu try.

fun main() {
    val varsta = "douăzeci"
    try {
        println(varsta.toInt())
    } catch (e: NumberFormatException) {
        println("Nu este număr: ${e.message}")
    }
}

Rezultat

Nu este număr: For input string: "douăzeci"

Greșeli frecvente

  • Convertești un text cu spații, de exemplu din readln(): " 7".toInt() aruncă excepție. Aplică întâi trim().
  • Folosești toInt() pe un număr cu zecimale: "9.5".toInt() eșuează. Folosește toDouble(), apoi toInt() sau roundToInt().
  • Pui un număr prea mare într-un Int: "3000000000".toInt() aruncă excepție. Folosește toLong().

Comenzi înrudite

  • String.toDouble: Transformă un text într-un număr cu zecimale (Double); toDoubleOrNull returnează null dacă textul nu e număr.
  • readln: Citește un rând scris de utilizator la tastatură; readlnOrNull returnează null când nu mai există date.
  • Int.toString: toString transformă un număr în text (opțional în altă bază, ca 2 sau 16); toChar dă caracterul cu acel cod.
  • null și null safety (?. ?: !!): null înseamnă „nicio valoare”. Kotlin separă tipurile care acceptă null (String?) și oferă ?., ?: și !! pentru ele.