[英]How to convert String to Long in Kotlin?
所以,由于缺乏像Long.valueOf(String s)
这样的方法,我被卡住了。
如何在 Kotlin 中将 String 转换为 Long?
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
将它们解析为其他原始类型。 下面的例子:
实际上,在 90% 的情况下,您还需要检查 'long' 是否有效,因此您需要:
"10".toLongOrNull()
基本类型的每个“toLong”都有一个“orNull”等价物,这些允许在与 Kotlin 保持一致的情况下管理无效案例? 成语。
这很有趣。 像这样的代码:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
使这个输出:
2
true
我猜,在这种情况下,Kotlin 会自动将java.lang.Long
和 long 原语转换为kotlin.Long
。 所以,这是解决方案,但我很高兴看到没有 java.lang 包使用的工具。
在 Kotlin 中将String
转换为Long
(表示 64 位有符号整数)非常简单。
您可以使用以下三种方法中的任何一种:
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
答案中没有提到的一种古老的 Java 可能性是java.lang.Long.decode(String)
。
十进制字符串:
Kotlin 的String.toLong()
等价于 Java 的Long.parseLong(String)
:
将字符串参数解析为有符号十进制 long 。 ... 返回结果 long 值,就像参数和基数 10 作为参数提供给
parseLong(java.lang.String, int)
方法一样。
非十进制字符串:
Kotlin 的String.toLong(radix: Int)
等价于 Java 的e Long.parseLong(String, int)
:
将字符串参数解析为第二个参数指定的基数中的有符号长整型。 字符串中的字符必须都是指定基数的数字...
下面是java.lang.Long.decode(String)
进入图片:
将字符串解码为 Long。 接受由以下语法给出的十进制、十六进制和八进制数: DecodableString:
(符号)十进制数字 | (符号) 0x HexDigits | (符号) 0X HexDigits | (符号)# HexDigits | (符号) 0 个八进制数字
签名: - | +
这意味着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
如果您不想在解析时处理NumberFormatException
var someLongValue=string.toLongOrNull() ?: 0
string.toLong()
其中string
是您的变量。
在Kotlin编程语言中有5种不同的方法将String转换为Long,如下所示:
请参阅文档以获取详细说明。
其实有以下几种方式:
鉴于:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.