Risposte:
1. string.toLong()
Analizza la stringa come un numero [lungo] e restituisce il risultato.
@throws NumberFormatException se la stringa non è una rappresentazione valida di un numero.
2. string.toLongOrNull()
Analizza la stringa come un numero [lungo] e restituisce il risultato o
null
se la stringa non è una rappresentazione valida di un numero.
3. str.toLong(10)
Analizza la stringa come un numero [lungo] e restituisce il risultato.
@throws NumberFormatException se la stringa non è una rappresentazione valida di un numero.
@throws IllegalArgumentException quando [radix] non è un radix valido per la conversione da stringa a numero.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Analizza la stringa come un numero [lungo] e restituisce il risultato o
null
se la stringa non è una rappresentazione valida di un numero.@throws IllegalArgumentException quando [radix] non è un radix valido per la conversione da stringa a numero.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
ha un metodo di estensione corrispondente:
"10".toLong()
String
hanno una funzione di estensione toLong()
così come toInt()
e altri. Puoi usarli. Forse @ilya può aggiornare questa risposta all'attuale Kotlin (rimuovi jet.String
riferimento.)
I metodi di estensione sono disponibili per String
s per analizzarli in altri tipi primitivi. Esempi di seguito:
str.toLongOrNull()
e altri metodi con nomi simili sono utili anche se non è possibile garantire che l'input sia formattato correttamente. Con questo puoi fare cose comestr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Nota: le risposte menzionate non jet.String
sono aggiornate. Ecco l'attuale Kotlin (1.0):
Chiunque String
in Kotlin ha già una funzione di estensione che puoi chiamare toLong()
. Non è necessario nulla di speciale, basta usarlo.
Tutte le funzioni di estensione perString
sono documentate. Puoi trovarne altri per lib standard nel riferimento api
È interessante. Codice come questo:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
rende questo output:
2
true
Immagino che Kotlin effettui automaticamente la conversione java.lang.Long
e la lunga primitiva kotlin.Long
in questo caso. Quindi, è una soluzione, ma sarei felice di vedere lo strumento senza l'utilizzo del pacchetto java.lang.
In realtà, il 90% delle volte è anche necessario verificare che il "lungo" sia valido, quindi è necessario:
"10".toLongOrNull()
Esiste un equivalente "orNull" per ogni "toLong" dei tipi di base, e questi consentono di gestire casi non validi in linea con Kotlin? idioma.
string.toLong ()
dov'è la string
tua variabile.
Una buona vecchia possibilità di Java ciò che non è menzionato nelle risposte è java.lang.Long.decode(String)
.
Stringhe decimali:
Kotlin String.toLong()
è equivalente a Java Long.parseLong(String)
:
Analizza l'argomento stringa come un decimale con segno lungo . ... Viene restituito il valore lungo risultante, esattamente come se l'argomento e la radice 10 fossero dati come argomenti al
parseLong(java.lang.String, int)
metodo.
Stringhe non decimali:
Kotlin String.toLong(radix: Int)
è equivalente a Java eLong.parseLong(String, int)
:
Analizza l'argomento stringa come long con segno nella radice specificata dal secondo argomento. I caratteri nella stringa devono essere tutti cifre della radice specificata ...
E qui viene java.lang.Long.decode(String)
in figura:
Decodifica una stringa in una lunga. Accetta numeri decimali, esadecimali e ottali forniti dalla seguente grammatica: DecodableString:
(Segno) DecimalNumeral | (Segno) 0x HexDigits | (Segno) 0X HexDigits | (Segno) # HexDigits | (Segno) 0 OctalDigits
Segno: - | +
Ciò significa che decode
può analizzare stringhe come "0x412"
, dove altri metodi si tradurranno in a NumberFormatException
.
val kotlin_toLong010 = "010".toLong() // 10 as parsed as decimal
val kotlin_toLong10 = "10".toLong() // 10 as parsed as decimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 as parsed as decimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 as parsed as decimal
val kotlin_toLong010Radix = "010".toLong(8) // 8 as "octal" parsing is forced
val kotlin_toLong10Radix = "10".toLong(8) // 8 as "octal" parsing is forced
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 as "octal" parsing is forced
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 as "octal" parsing is forced
val java_decode010 = java.lang.Long.decode("010") // 8 as 0 means "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 as parsed as decimal
Convertire String
a Long
(che rappresenta un numero intero con segno a 64 bit) in Kotlin 1.3 è abbastanza semplice .
È possibile utilizzare uno dei tre metodi seguenti:
val number1: Long = "789".toLong()
println(number1) // 789
val number2: Long? = "404".toLongOrNull()
println("number = $number2") // number = 404
val number3: Long? = "Error404".toLongOrNull()
println("number = $number3") // number = null
val number4: Long? = "111".toLongOrNull(2)
println("numberWithRadix(2) = $number4") // numberWithRadix(2) = 7
Se non si desidera gestire NumberFormatException
durante l'analisi
var someLongValue=string.toLongOrNull() ?: 0
In realtà, ci sono diversi modi:
Dato:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Poi abbiamo:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+