Respostas:
1 string.toLong()
Analisa a string como um número [Long] e retorna o resultado.
@throws NumberFormatException se a sequência não for uma representação válida de um número.
2) string.toLongOrNull()
Analisa a string como um número [Long] e retorna o resultado ou
null
se a string não é uma representação válida de um número.
3) str.toLong(10)
Analisa a string como um número [Long] e retorna o resultado.
@throws NumberFormatException se a sequência não for uma representação válida de um número.
@throws IllegalArgumentException quando [radix] não é um radical válido para conversão de string em número.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4) string.toLongOrNull(10)
Analisa a string como um número [Long] e retorna o resultado ou
null
se a string não é uma representação válida de um número.@throws IllegalArgumentException quando [radix] não é um radical válido para conversão de string em número.
public fun String.toLongOrNull(radix: Int): Long? {...}
5) java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
possui um método de extensão correspondente:
"10".toLong()
String
têm uma função de extensão toLong()
, bem como toInt()
, entre outros. Você pode usá-los. Talvez @ilya pode atualizar esta resposta para Kotlin atual (remove jet.String
referência.)
Os métodos de extensão estão disponíveis para String
s para analisá-los em outros tipos primitivos. Exemplos abaixo:
str.toLongOrNull()
e outros métodos com nomes semelhantes também serão úteis se você não puder garantir que a entrada será formatada corretamente. Com isso você pode fazer coisas comostr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Nota: As respostas mencionadas jet.String
estão desatualizadas. Aqui está o Kotlin atual (1.0):
Qualquer pessoa String
no Kotlin já possui uma função de extensão que você pode chamar toLong()
. Nada de especial é necessário, basta usá-lo.
Todas as funções de extensão paraString
estão documentadas. Você pode encontrar outras pessoas para a lib padrão na referência da API
É interessante. Código como este:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
faz esta saída:
2
true
Eu acho que Kotlin faz a conversão de java.lang.Long
e longo primitivo para kotlin.Long
automaticamente neste caso. Portanto, é uma solução, mas eu ficaria feliz em ver a ferramenta sem o uso do pacote java.lang.
Na verdade, 90% das vezes você também precisa verificar o 'long' é válido, então você precisa:
"10".toLongOrNull()
Existe um equivalente 'orNull' para cada 'toLong' dos tipos básicos, e eles permitem gerenciar casos inválidos de acordo com o Kotlin? idioma.
string.toLong ()
Onde string
está sua variável?
Uma boa e antiga possibilidade de Java que não é mencionada nas respostas é java.lang.Long.decode(String)
.
Sequências decimais:
O Kotlin's String.toLong()
é equivalente ao Java Long.parseLong(String)
:
Analisa o argumento da string como um comprimento decimal assinado . ... O valor longo resultante é retornado, exatamente como se o argumento e a raiz 10 fossem dados como argumentos para o
parseLong(java.lang.String, int)
método.
Strings não decimais:
O Kotlin's String.toLong(radix: Int)
é equivalente ao eLong.parseLong(String, int)
: do Java
Analisa o argumento da string como um longo assinado na raiz especificada pelo segundo argumento. Os caracteres na sequência devem ser todos dígitos da raiz especificada ...
E aqui entra java.lang.Long.decode(String)
em cena:
Decodifica uma String em um Long. Aceita números decimais, hexadecimais e octais fornecidos pela seguinte gramática: DecodableString:
(Sinal) DecimalNumeral | (Assinar) 0x HexDigits | (Assinar) 0X HexDigits | (Assinar) # HexDigits | (Sinal) 0 OctalDigits
Sinal: - | +
Isso significa que decode
pode analisar Strings como "0x412"
, onde outros métodos resultarão em 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
Converter um String
para Long
(que representa um número inteiro assinado de 64 bits) no Kotlin 1.3 é bastante simples .
Você pode usar qualquer um dos três métodos a seguir:
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 você não quiser manipular NumberFormatException
enquanto estiver analisando
var someLongValue=string.toLongOrNull() ?: 0
Na verdade, existem várias maneiras:
Dado:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Então nós temos:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+