【问题标题】:How to split a string with no spaces into array of integers in Kotlin? [duplicate]如何在 Kotlin 中将没有空格的字符串拆分为整数数组? [复制]
【发布时间】:2018-02-08 20:15:47
【问题描述】:

我需要将一个字符串拆分为一个整数数组。我试过这个:

val string = "1234567"
val numbers = string.split("").map { it.toInt() }
println(numbers.get(1))

但抛出以下异常:

线程“主”java.lang.NumberFormatException 中的异常:
对于输入字符串:“”在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.lang.Integer.parseInt(Integer.java:592) 在 java.lang.Integer.parseInt(Integer.java:615) 在 net.projecteuler.Problem_008Kt.main(Problem_008.kt:54)

如何将字符串“123456”转换为数组[1,2,3,4,5,6]?

【问题讨论】:

    标签: arrays string split kotlin


    【解决方案1】:

    您的split("") 方法导致[, 1, 2, 3, 4, 5, 6, 7, ],即第一个和最后一个元素不能格式化为数字。

    其实,CharSequence.map 就是你所需要的:

    val numbers = string.map { it.toString().toInt() } //[1, 2, 3, 4, 5, 6, 7]
    

    使用此代码,String 的单个字符将转换为相应的Int 表示形式。它会生成一个List<Int>,它可以转换为这样的数组:

    string.map { it.toString().toInt() }.toIntArray()
    

    【讨论】:

      【解决方案2】:

      你只是不需要split,但你也不能直接在角色上调用toInt();这将为您提供其 Unicode 值作为整数。你需要Character.getNumericValue():

      val string = "1234567"
      val digits = string.map(Character::getNumericValue).toIntArray()
      println(digits[1])
      

      它打印 2。

      【讨论】:

        【解决方案3】:

        如前所述,使用地图就足够了。我只想补充一点,您应该考虑您的字符串不仅包含数字的情况。

        这个扩展函数会解决这个问题:

        fun String.toSingleDigitList() = map {
            "$it".toIntOrNull()
        }.filterNotNull()
        

        用法:

        val digits = "31w4159".toSingleDigitList()
        

        结果:

        [3, 1, 4, 1, 5, 9]

        【讨论】:

          猜你喜欢
          • 2021-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-07
          • 2019-07-09
          • 1970-01-01
          • 2016-12-19
          相关资源
          最近更新 更多