Ответы:
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ссылку.)
Методы расширения доступны для Strings, чтобы анализировать их в другие примитивные типы. Примеры ниже:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+