繁体   English   中英

如何在 Kotlin 中将 String 转换为 Long?

[英]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将它们解析为其他原始类型。 下面的例子:

注意:提到jet.String答案已过时。 这是当前的 Kotlin (1.0):

Kotlin 中的任何String都有一个扩展函数,您可以调用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 中将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,如下所示:

  1. string.toLong()
  2. string.toLongOrNull()
  3. string.toLong(10)
  4. string.toLongOrNull(10)
  5. java.lang.Long.valueOf(串)

请参阅文档以获取详细说明。

其实有以下几种方式:

鉴于:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM