Ответы:
1. string.toLong()
Разбирает строку как [Long] число и возвращает результат.
@throws NumberFormatException, если строка не является допустимым представлением числа.
2. string.toLongOrNull()
Анализирует строку как число [Long] и возвращает результат или,
null
если строка не является допустимым представлением числа.
3. str.toLong(10)
Разбирает строку как [Long] число и возвращает результат.
@throws NumberFormatException, если строка не является допустимым представлением числа.
@throws IllegalArgumentException, когда [radix] не является допустимым основанием для преобразования строки в число.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Анализирует строку как число [Long] и возвращает результат или,
null
если строка не является допустимым представлением числа.@throws IllegalArgumentException, когда [radix] не является допустимым основанием для преобразования строки в число.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
имеет соответствующий метод расширения:
"10".toLong()
String
есть функция расширения, toLong()
как toInt()
и у других. Вы можете использовать это. Возможно, @ilya может обновить этот ответ для текущего Kotlin (удалить jet.String
ссылку.)
Методы расширения доступны для String
s, чтобы анализировать их в другие примитивные типы. Примеры ниже:
str.toLongOrNull()
и другие методы с аналогичными именами также полезны, если вы не можете гарантировать, что ввод будет отформатирован правильно. С этим вы можете делать такие вещи, какstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Примечание: упоминания ответов jet.String
устарели. Вот текущий Котлин (1.0):
Любой String
в Котлине уже имеет функцию расширения, которую вы можете вызвать toLong()
. Ничего особенного не нужно, просто используйте его.
Все функции расширения дляString
задокументированы. Вы можете найти другие для стандартной библиотеки в справочнике API
Это интересно. Код как это:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
делает этот вывод:
2
true
Я предполагаю, что Kotlin делает преобразование из java.lang.Long
и долго примитивным в kotlin.Long
автоматическое в этом случае. Итак, это решение, но я был бы рад увидеть инструмент без использования пакета java.lang.
На самом деле, в 90% случаев вам также нужно проверить «long», так что вам нужно:
"10".toLongOrNull()
Существует эквивалент orNull для каждого «toLong» базовых типов, и они позволяют управлять недействительными случаями в соответствии с Kotlin? идиома.
string.toLong ()
где string
ваша переменная
Одна хорошая старая возможность Java, что не упомянуто в ответах java.lang.Long.decode(String)
.
Десятичные строки:
Котлин String.toLong()
эквивалентен Java Long.parseLong(String)
:
Разбирает строковый аргумент как длинный десятичный знак со знаком . ... Полученное длинное значение возвращается точно так же, как если бы аргумент и основание 10 были заданы в качестве аргументов
parseLong(java.lang.String, int)
метода.
Недесятичные строки:
Котлин String.toLong(radix: Int)
эквивалентен Java- еLong.parseLong(String, int)
:
Разбирает строковый аргумент как длинную со знаком в основании, указанном вторым аргументом. Все символы в строке должны быть цифрами указанного радиуса ...
И тут java.lang.Long.decode(String)
на снимке появляется:
Декодирует строку в длинный. Принимает десятичные, шестнадцатеричные и восьмеричные числа, заданные следующей грамматикой: DecodableString:
(Знак) Десятичная цифра | (Знак) 0x HexDigits | (Подпись) 0X HexDigits | (Подпись) # HexDigits | (Подпись) 0 OctalDigits
Знак: - | +
Это означает, что decode
может анализировать строки как "0x412"
, где другие методы приведут к 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
Преобразовать String
в Long
(который представляет 64-разрядное целое число со знаком) в Kotlin 1.3 довольно просто .
Вы можете использовать любой из следующих трех методов:
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
Если вы не хотите обрабатывать NumberFormatException
при разборе
var someLongValue=string.toLongOrNull() ?: 0
На самом деле, есть несколько способов:
Дано:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Тогда мы имеем:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+