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


157

因此,由于缺乏像Long.valueOf(String s)我这样的方法而陷入困境。

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

Answers:


153

1。 string.toLong()

将字符串解析为[Long]数字并返回结果。

如果字符串不是数字的有效表示形式,则@throws NumberFormatException。

2。 string.toLongOrNull()

将字符串解析为[Long]数字并返回结果,或者null 如果字符串不是数字的有效表示形式。

3。 str.toLong(10)

将字符串解析为[Long]数字并返回结果。

如果字符串不是数字的有效表示形式,则@throws NumberFormatException。

如果[radix]对于将字符串转换为数字无效,则为@throws IllegalArgumentException。

public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

4。 string.toLongOrNull(10)

将字符串解析为[Long]数字并返回结果,或者null 如果字符串不是数字的有效表示形式。

如果[radix]对于将字符串转换为数字无效,则为@throws IllegalArgumentException。

public fun String.toLongOrNull(radix: Int): Long? {...}

5, java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException

1
埃瓦尔,阿里·鲍德
DolDurma

94

String 有相应的扩展方法:

"10".toLong()

1
名称在Kotlin中已更改,您不必担心在哪里或为什么,只需在Kotlin中知道所有String功能都具有扩展功能toLong()以及toInt()其他功能。您可以使用这些。也许@ilya可以将此答案更新为当前的Kotlin(删除jet.String参考。)
Jayson Minard,2015年

请注意,如果您要迭代一串数字,则它们将为char,而[char] .toInt()将为您提供ascii表示。
Peheje



7

这真有趣。像这样的代码:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

使此输出:

2
true

我猜想,在这种情况下,Kotlin会自动进行从java.lang.Long长原始值的转换kotlin.Long。因此,它是解决方案,但是我很高兴看到没有使用java.lang软件包的工具。


6

实际上,您还需要90%的时间检查'long'是否有效,因此您需要:

"10".toLongOrNull()

每个基本类型的“ toLong”都有一个“ orNull”等价物,它们允许与Kotlin一起管理无效案件?成语。


同意 大多数情况下,.toLongOrNull()是您所需要的。
Andrej


0

答案中未提到的一种古老的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)图片:

将字符串解码为Long。接受以下语法给定的十进制,十六进制和八进制数字:DecodableString:

(符号)DecimalNumeral | (Sign)0x十六进制数字| (签名)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

0

在Kotlin 1.3中将转换StringLong(表示一个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

0

如果您不想NumberFormatException在解析时处理

 var someLongValue=string.toLongOrNull() ?: 0

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          |
+—————————————————————————————————————————————+——————————+———————————————————————+

您如何拥有defaultValue = Long:defaultValue在您的示例中将在哪里使用numberString /我认为应该为defaultValue = Long:numberString?
詹姆斯·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.