所以,由于缺乏像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()
s可以使用扩展方法将String
它们解析为其他原始类型。以下示例:
注意:提到的答案jet.String
已过时。这是当前的 Kotlin (1.0):
Kotlin 中的AnyString
已经有一个可以调用的扩展函数toLong()
。不需要什么特别的,只要使用它。
的所有扩展功能String
都记录在案。您可以在api 参考中找到其他标准库
实际上,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 中将 a转换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 的eLong.parseLong(String, int)
:
将字符串参数解析为第二个参数指定的基数中的有符号长整数。字符串中的字符必须都是指定基数的数字...
这里出现java.lang.Long.decode(String)
在图片中:
将 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
其实有几种方法:
鉴于:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+
string.toLong()
string
你的变量在哪里。