如何将字符串转换为长在Kotlin?

因此,由于缺少像Long.valueOf(String s)这样的方法,我被卡住了。

如何将字符串转换为长在Kotlin?

122123 次浏览

这很有趣。代码如下:

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

生成如下输出:

2
true

我猜,在这种情况下,Kotlin会自动从java.lang.Long和长原语转换为kotlin.Long。所以,这是解决方案,但我很高兴看到没有java的工具。朗包用法。

String有相应的扩展方法:

"10".toLong()

Strings可以使用扩展方法将它们解析为其他基本类型。在下面的例子:

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

Kotlin中的任何String都已经有一个扩展函数,可以调用toLong()。不需要什么特别的东西,就用它吧。

所有String的扩展函数都有文档。你可以在api参考中找到其他标准库

实际上,90%的情况下你还需要检查long是否有效,所以你需要:

"10".toLongOrNull()

有一个'orNull'等效的每个'toLong'的基本类型,这些允许管理无效的情况与Kotlin?习语。

< em > 1。string.toLong() < / em >

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

如果字符串无效,则抛出NumberFormatException

< em > 2。string.toLongOrNull() < / em >

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

.如果字符串不是数字的有效表示

< em > 3。str.toLong(10) < / em >

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

如果字符串无效,则抛出NumberFormatException 数字的表示。< / p >

@抛出IllegalArgumentException时

. [radix]不是字符串到数字转换的有效基数
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

< em > 4。string.toLongOrNull(10) < / em >

将字符串解析为[Long]数字,并返回结果或null 如果字符串不是数字的有效表示。< / p > 当[基数]不是一个有效的基数时,

@抛出IllegalArgumentException

.

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

< em > 5。java.lang.Long.valueOf(string) < / em >

public static Long valueOf(String s) throws NumberFormatException
string.toLong()

其中string是你的变量。

答案中没有提到的一个很好的旧Java可能性是java.lang.Long.decode(String)


小数的字符串:

Kotlin的String.toLong()等价于Java的Long.parseLong(String):

将字符串参数解析为带符号的十进制长. ...的 返回结果的长值,就像参数和 基数10作为parseLong(java.lang.String, int)方法的参数


Non-decimal字符串:

Kotlin的String.toLong(radix: Int)等价于Java的eLong.parseLong(String, int):

将字符串参数解析为指定的带符号长基数 第二个论点。字符串中的字符必须都是指定基数的数字…< / p >

这里出现了java.lang.Long.decode(String):

将字符串解码为长字符串。接受十进制、十六进制和八进制 DecodableString:

(符号)decimalnumbers |(符号)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

在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)         // binary
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7

使用toLongOrNull()方法,可以在?.安全调用运算符后使用let { }作用域函数。

这种逻辑适用于只使用非空值执行代码块。

fun convertToLong(that: String) {
that.toLongOrNull()?.let {
println("Long value is $it")
}
}
convertToLong("123")                               // Long value is 123

如果你不想在解析时处理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          |
+—————————————————————————————————————————————+——————————+———————————————————————+