我尝试使用this问题的答案将由,
分隔的一串项目组合成Int列表,因此我创建了此代码:
fun main(args: Array<String>) {
val regex = ","
val lines = "30,21,29, 31, 40, 48, 53, 47, 37, 39, 31, 29, 17, 9, 20, 24, 27, 35, 41, 38, 27, 31, 27, 26, 21, 13, 21, 18, 33, 35, 40, 36, 22, 24, 21, 20, 17, 14, 17, 19, 26, 29, 40, 31, 20, 24, 18, 26, 17, 9, 17, 21, 28, 32, 46, 33, 23, 28, 22, 27, 18, 8, 17, 21, 31, 34, 44, 38, 31, 30, 26, 32"
val series = lines.split(regex).toList().map{ it.toInt() }.toList<Int>()
println(series)
}
但它没有用,我收到了这个错误:
线程“main”中的异常java.lang.NumberFormatException:用于输入 字符串:“31” at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在java.lang.Integer.parseInt(Integer.java:569) 在java.lang.Integer.parseInt(Integer.java:615) 在Reading_many_names_from_the_command_lineKt.main(从命令行读取许多名称.kt:5)
答案 0 :(得分:3)
当您只是,
分开时,您将获得所有空格作为令牌的一部分。
一种解决方案是在转换为Int:
之前修剪字符串val series: List<Int> = lines.split(regex).map{ it.trim().toInt() }
我也简化了你的表达,你不需要额外的List转换。
答案 1 :(得分:1)
java.lang.NumberFormatException: For input string: " 31"
错误就在你面前。 &#34; 31&#34;不是有效的数字。要解决此问题,您可以map{ it.trim().toInt() }
代替map{ it.toInt() }
。
在split()
调用之后,您将获得一个字符串数组。要素是:
&#34; 30&#34;,&#34; 21&#34;,&#34; 29&#34;,&#34; 31&#34;,&#34; 40&#34;前三个数字很好,之后它们有一个额外的空格字符。 &#34; 31&#34;无法转换为整数。
要删除空白区域,您可以使用trim()
功能。
答案 2 :(得分:1)
在,
上拆分字符串会使空格保持不变。您可以在拆分后修剪所有字符串(如其他答案所示),或者您可以将字符串拆分为“逗号后跟(或前面)任意数量的空格”。为此,您需要更改要拆分的正则表达式。像这样:
val regex = "\\s*,\\s*".toRegex()
val series = lines.split(regex).map { it.toInt() }