Respuestas:
1) string.toLong()
Analiza la cadena como un número [Largo] y devuelve el resultado.
@throws NumberFormatException si la cadena no es una representación válida de un número.
2) string.toLongOrNull()
Analiza la cadena como un número [Largo] y devuelve el resultado o
null
si la cadena no es una representación válida de un número.
3) str.toLong(10)
Analiza la cadena como un número [Largo] y devuelve el resultado.
@throws NumberFormatException si la cadena no es una representación válida de un número.
@throws IllegalArgumentException cuando [radix] no es una raíz válida para la conversión de cadena a número.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4) string.toLongOrNull(10)
Analiza la cadena como un número [Largo] y devuelve el resultado o
null
si la cadena no es una representación válida de un número.@throws IllegalArgumentException cuando [radix] no es una raíz válida para la conversión de cadena a número.
public fun String.toLongOrNull(radix: Int): Long? {...}
5) java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
tiene un método de extensión correspondiente:
"10".toLong()
String
tienen una función de extensión toLong()
, así como toInt()
otros. Puedes usar estos. Quizás @ilya pueda actualizar esta respuesta a Kotlin actual (eliminar jet.String
referencia)
Los métodos de extensión están disponibles para que String
s los analice en otros tipos primitivos. Ejemplos a continuación:
str.toLongOrNull()
y otros métodos con nombres similares también son útiles si no puede garantizar que la entrada se formateará correctamente. Con esto puedes hacer cosas comostr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Nota: Las respuestas que mencionan jet.String
están desactualizadas. Aquí está el Kotlin actual (1.0):
Cualquiera String
en Kotlin ya tiene una función de extensión a la que puede llamartoLong()
. No se necesita nada especial, solo úselo.
Todas las funciones de extensiónString
están documentadas. Puede encontrar otros para lib estándar en la referencia de la API
Es interesante. Código como este:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
hace esta salida:
2
true
Supongo que Kotlin hace una conversión desde java.lang.Long
primitiva larga a kotlin.Long
automática en este caso. Entonces, es la solución, pero me encantaría ver la herramienta sin el uso del paquete java.lang.
En realidad, el 90% de las veces que también necesita verificar el 'largo' es válido, por lo que necesita:
"10".toLongOrNull()
¿Hay un equivalente 'o Nulo' para cada 'toLong' de los tipos básicos, y estos permiten gestionar casos no válidos con Kotlin? idioma.
string.toLong ()
¿Dónde string
está tu variable?
Una buena posibilidad de Java que no se menciona en las respuestas es java.lang.Long.decode(String)
.
Cuerdas Decimales:
Kotlin String.toLong()
es equivalente a Java Long.parseLong(String)
:
Analiza el argumento de cadena como un decimal con signo largo . ... Se devuelve el valor largo resultante, exactamente como si el argumento y la raíz 10 fueran dados como argumentos del
parseLong(java.lang.String, int)
método.
Cadenas no decimales:
Kotlin String.toLong(radix: Int)
es equivalente a eLong.parseLong(String, int)
de Java :
Analiza el argumento de cadena como un signo largo en la raíz especificada por el segundo argumento. Todos los caracteres de la cadena deben ser dígitos de la raíz especificada ...
Y aquí entra java.lang.Long.decode(String)
en escena:
Decodifica una cadena en un largo. Acepta números decimales, hexadecimales y octales dados por la siguiente gramática: DecodableString:
(Signo) DecimalNumeral | (Signo) 0x HexDigits | (Firmar) 0X HexDigits | (Firmar) # HexDigits | (Signo) 0 OctalDigits
Signo: - | +
Eso significa que decode
puede analizar cadenas como "0x412"
, donde otros métodos resultarán en 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
Convertir un String
a Long
(que representa un entero con signo de 64 bits) en Kotlin 1.3 es bastante simple .
Puede usar cualquiera de los siguientes tres métodos:
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
Si no desea manejar NumberFormatException
mientras analiza
var someLongValue=string.toLongOrNull() ?: 0
En realidad, hay varias formas:
Dado:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Entonces nosotros tenemos:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+