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

How to convert String to Long in Kotlin?

Kotlin挑战已经开始。

所有任务都是编写一个控制台程序,该程序从控制台读取参数,并将输出写入控制台,以使自动检查成为可能。

Kotlin的主要方法如下

1
2
3
fun main(args: Array<String>): Unit {
    //do something
}

任务中的大多数输入参数都应解释为数字。因此,由于缺乏像Long.valueOf(String s)这样的方法,我只能坚持下去。我不能把绳子变长,我感到羞愧。


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


String有相应的扩展方法:

1
"10".toLong()


扩展方法可用于String将它们解析为其他基元类型。示例如下:

  • 江户十一〔四〕号
  • 埃多克斯1〔5〕
  • 埃多克斯1〔6〕
  • 江户十一〔七〕号
  • 埃多克斯1〔8〕
  • 埃多克斯1〔9〕
  • 埃多克斯1〔10〕
  • 小精灵


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

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

    记录了String的所有扩展函数。您可以在API引用中找到其他标准库


    实际上,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会自动从java.lang.Long和long-primitive转换为kotlin.Long。所以,这是解决方案,但我很高兴看到没有java.lang包使用的工具。


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

    1
     var someLongValue=string.toLongOrNull() ?: 0

    字符串.tolong()

    其中,String是您的变量。


    实际上,有几种方法:

    鉴于:

    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中,将String转换为Long(表示64位有符号整数)非常简单。

    您可以使用以下三种方法之一:

    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旧的可能性,答案中没有提到的是java.lang.Long.decode(String)

    十进制字符串:

    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 the parseLong(java.lang.String, int) method.

    非十进制字符串:

    Kotlin的String.toLong(radix: Int)相当于Java的Long.parseLong(String, int)

    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 ...

    下面是java.lang.Long.decode(String)的图片:

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

    这意味着decode可以解析像"0x412"这样的字符串,其他方法将导致NumberFormatException

    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种不同的方法可以将字符串转换为长字符串,如下所示:

  • 字符串.tolong()
  • string.tolongornull()。
  • 特龙(10)
  • 字符串.tolongornull(10)
  • Java.Lang.Lo.Valueof(字符串)
  • 详细说明见文件。