Как преобразовать String в Long в Kotlin?
Kotlin Challenge начался.
Все задачи состоят в том, чтобы написать консольную программу, которая считывает параметры из консоли и записывает вывод в консоль, чтобы сделать возможной автоматическую проверку.
основной метод в Kotlin выглядит
fun main(args: Array<String>): Unit {
//do something
}
Большинство входных параметров в задачах следует интерпретировать как числа. Итак, из-за отсутствия таких методов, как Long.valueOf(String s)
я просто застрял. Я не могу конвертировать String в Long, и мне стыдно.
Ответы
Ответ 1
1. string.toLong()
Разбирает строку как число [Long] и возвращает результат.
@throws NumberFormatException, если строка недействительна представление числа.
2. string.toLongOrNull()
Разбирает строку как [длинный] номер и возвращает результат или 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)
Разбирает строку как [длинный] номер и возвращает результат или 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
Ответ 2
String
имеет соответствующий метод расширения:
"10".toLong()
Ответ 3
Доступны методы расширения для String
для их анализа на другие примитивные типы. Примеры ниже:
Ответ 4
Примечание. Ответы, упоминающие jet.String
, устарели. Вот текущий Котлин (1.0):
Любой String
в Котлине уже имеет функцию расширения, которую вы можете вызвать toLong()
. Ничего особенного не требуется, просто используйте его.
Все функции расширения для String
задокументированы. Вы можете найти других для стандартной библиотеки в ссылке api
Ответ 5
Это интересно. Код вроде этого:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
делает этот вывод:
2
true
Я предполагаю, что Котлин в этом случае автоматически преобразует из java.lang.Long
и длинный примитив в kotlin.Long
. Итак, это решение, но я был бы рад видеть инструмент без использования пакета java.lang.
Ответ 6
Фактически, 90% времени, которое вам нужно также проверить на "длинный", действительно, поэтому вам нужно:
"10".toLongOrNull()
Существует эквивалент "orNull" для каждого "toLong" базовых типов, и это позволяет управлять недействительными случаями с сохранением Kotlin? идиомы.
Ответ 7
string.toLong()
где string
ваша переменная.
Ответ 8
Если вы не хотите обрабатывать NumberFormatException
при разборе
var someLongValue=string.toLongOrNull() ?: 0
Ответ 9
Существует 5 различных способов конвертировать String в Long на языке программирования Kotlin, как показано ниже:
- string.toLong()
- string.toLongOrNull()
- string.toLong(10)
- string.toLongOrNull(10)
- java.lang.Long.valueOf (строка)
Обратитесь к документации для объяснения в деталях.
Ответ 10
Одна хорошая старая возможность Java, что не упомянуто в ответах, является java.lang.Long.decode(String)
.
Десятичные строки:
Kotlin String.toLong()
эквивалентен Java Long.parseLong(String)
:
Разбирает строковый аргумент как длинный десятичный знак со знаком... Полученное длинное значение возвращается точно так же, как если бы аргумент и основание 10 были заданы в качестве аргументов parseLong(java.lang.String, int)
.
Недесятичные строки:
Kotlin String.toLong(radix: Int)
эквивалентен Java e 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
Ответ 11
Преобразовать 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
Ответ 12
На самом деле, есть несколько способов:
Дано:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+
Ответ 13
val a:String="10"
val value:Long=a.toLong()