【问题标题】:How to convert String to Long in Kotlin?如何在 Kotlin 中将 String 转换为 Long?
【发布时间】:2013-10-31 10:01:35
【问题描述】:

所以,由于缺乏像Long.valueOf(String s) 这样的方法,我被困住了。

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

【问题讨论】:

    标签: kotlin


    【解决方案1】:
    string.toLong()
    

    string 是你的变量。

    【讨论】:

      【解决方案2】:

      在 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
      

      【讨论】:

        【解决方案3】:

        其实有几种方法:

        给定:

        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?
        【解决方案4】:

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

         var someLongValue=string.toLongOrNull() ?: 0
        

        【讨论】:

          【解决方案5】:

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


          十进制字符串:

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

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


          非十进制字符串:

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

          将字符串参数解析为指定基数的有符号长整数 第二个论点。 字符串中的字符必须都是指定基数的数字 ...

          java.lang.Long.decode(String) 出现在图片中:

          将 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
          

          【讨论】:

            【解决方案6】:

            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
            

            【讨论】:

              【解决方案7】:

              其实90%的时候你还需要检查'long'是否有效,所以你需要:

              "10".toLongOrNull()
              

              每个基本类型的“toLong”都有一个“orNull”等价物,这些允许在与 Kotlin 保持一致的情况下管理无效案例?成语。

              【讨论】:

              • 同意。大多数时候 .toLongOrNull() 是你需要的。
              【解决方案8】:

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

              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 包的工具。

              【讨论】:

                【解决方案9】:

                Strings 可以使用扩展方法将它们解析为其他原始类型。以下示例:

                【讨论】:

                • 如果您不能保证输入的格式正确,str.toLongOrNull() 和其他类似命名的方法也很有用。有了这个你可以做类似str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
                【解决方案10】:

                String有对应的扩展方法:

                "10".toLong()
                

                【讨论】:

                • 名称在 Kotlin 中发生了变化,你不必担心在哪里或为什么,只要知道在 Kotlin 中所有 String 都有扩展函数 toLong() 以及 toInt() 等.你可以使用这些。也许@ilya 可以将此答案更新为当前的 Kotlin(删除 jet.String 参考。)
                • 请注意,如果您要迭代一串数字,它们将是字符,而 [char].toInt() 将为您提供 ascii 表示。
                【解决方案11】:

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

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

                所有extension functions for String 都已记录在案。您可以在api reference中找到其他标准库

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-12-03
                  • 1970-01-01
                  • 2022-01-07
                  • 2021-10-24
                  • 1970-01-01
                  • 2022-01-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多