How to convert String to Long in Kotlin?
Kotlin挑战已经开始。
所有任务都是编写一个控制台程序,该程序从控制台读取参数,并将输出写入控制台,以使自动检查成为可能。
Kotlin的主要方法如下
1 2 3 | fun main(args: Array<String>): Unit { //do something } |
任务中的大多数输入参数都应解释为数字。因此,由于缺乏像
1。埃多克斯1〔15〕
Parses the string as a [Long] number and returns the result.
@throws NumberFormatException if the string is not a valid
representation of a number.
号
2。江户十一〔16〕号
Parses the string as a [Long] number and returns the result or
null
if the string is not a valid representation of a number.
号
三。埃多克斯1〔17〕
Parses the string as a [Long] number and returns the result.
@throws NumberFormatException if the string is not a valid
representation of a number.@throws IllegalArgumentException when
[radix] is not a valid radix for string to number conversion.
号
1 | public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix)) |
4。埃多克斯1〔18〕
Parses the string as a [Long] number and returns the result or
null
if the string is not a valid representation of a number.@throws IllegalArgumentException when [radix] is not a valid radix for string
to number conversion.
号
1 | public fun String.toLongOrNull(radix: Int): Long? {...} |
。
5。埃多克斯1〔19〕
1 | public static Long valueOf(String s) throws NumberFormatException |
。
1 | "10".toLong() |
扩展方法可用于
- 江户十一〔四〕号
- 埃多克斯1〔5〕
- 埃多克斯1〔6〕
- 江户十一〔七〕号
- 埃多克斯1〔8〕
- 埃多克斯1〔9〕
- 埃多克斯1〔10〕
- 字符串.tolong()
- string.tolongornull()。
- 特龙(10)
- 字符串.tolongornull(10)
- Java.Lang.Lo.Valueof(字符串)
小精灵
注:提及
Kotlin中的任何
记录了
实际上,90%的时间您还需要检查"long"是否有效,因此您需要:
1 | "10".toLongOrNull() |
。
对于每个基本类型的"tolong",都有一个"ornull"等价物,并且这些等价物允许使用Kotlin管理无效案例?成语。
很有趣。代码如下:
1 2 3 | val num = java.lang.Long.valueOf("2"); println(num); println(num is kotlin.Long); |
生成此输出:
1 2 | 2 true |
号
我猜,在这种情况下,Kotlin会自动从
如果您不想在解析时处理
1 | var someLongValue=string.toLongOrNull() ?: 0 |
字符串.tolong()
其中,
实际上,有几种方法:
鉴于:
1 2 3 | var numberString : String ="numberString" // number is the Long value of numberString (if any) var defaultValue : Long = defaultValue |
。
然后我们有:
1 2 3 4 5 6 7 8 9 | +—————————————————————————————————————————————+——————————+———————————————————————+ | numberString is a valid number ? | true | false | +—————————————————————————————————————————————+——————————+———————————————————————+ | numberString.toLong() | number | NumberFormatException | +—————————————————————————————————————————————+——————————+———————————————————————+ | numberString.toLongOrNull() | number | null | +—————————————————————————————————————————————+——————————+———————————————————————+ | numberString.toLongOrNull() ?: defaultValue | number | defaultValue | +—————————————————————————————————————————————+——————————+———————————————————————+ |
号
在Kotlin1.3中,将
您可以使用以下三种方法之一:
1 2 3 4 5 6 7 8 9 10 11 | 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旧的可能性,答案中没有提到的是
十进制字符串:
Kotlin的EDOCX1 15Ω相当于Java的EDCOX1,23:
Parses the string argument as a signed decimal long. ... The
resulting long value is returned, exactly as if the argument and the
radix 10 were given as arguments to theparseLong(java.lang.String, int) method.
号
非十进制字符串:
Kotlin的
Parses the string argument as a signed long in the radix specified by
the second argument. The characters in the string must all be digits of the specified radix ...
号
下面是
Decodes a String into a Long. Accepts decimal, hexadecimal, and octal
numbers given by the following grammar: DecodableString:(Sign) DecimalNumeral | (Sign) 0x HexDigits | (Sign) 0X HexDigits | (Sign) # HexDigits | (Sign) 0 OctalDigits
Sign: - | +
号
这意味着
1 2 3 4 5 6 7 8 9 10 11 12 | 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编程语言中,有5种不同的方法可以将字符串转换为长字符串,如下所示:
详细说明见文件。