Kotlin 将csv字符串转换为整数列表

Kotlin 将csv字符串转换为整数列表,kotlin,Kotlin,我试图使用问题的答案将一系列由,分隔的项目整合到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,

我试图使用问题的答案将一系列由
分隔的项目整合到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)
}
fun main(args:Array){
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,27,26,21,13,21,18,33,35,40,36,22,24,21,20,17,14,17,19,26,40,31,20,18,26,17,17,21,28,32,46,33,28,22,18,8,17,21,31,34,44,38,30,32”
val series=lines.split(regex.toList().map{it.toInt()}.toList())
println(系列)
}
但它不起作用,我得到了这个错误:

线程“main”java.lang.NumberFormatException中的异常:用于输入 字符串:“31” 位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在java.lang.Integer.parseInt(Integer.java:569) 在java.lang.Integer.parseInt(Integer.java:615) 在从命令行kt.main读取多个名称时(从命令行kt:5读取多个名称)


当您仅在
上拆分时,
您将获得所有空白作为令牌的一部分

一种解决方案是在转换为Int之前修剪字符串:

val series: List<Int> = lines.split(regex).map{ it.trim().toInt() }
val系列:List=lines.split(regex).map{it.trim().toInt()}

我还简化了您的表达式,您不需要额外的列表转换。

当您仅在
上拆分时,
您将获得所有空白作为标记的一部分

java.lang.NumberFormatException: For input string: " 31"
一种解决方案是在转换为Int之前修剪字符串:

val series: List<Int> = lines.split(regex).map{ it.trim().toInt() }
val系列:List=lines.split(regex).map{it.trim().toInt()}
我还简化了表达式,不需要额外的列表转换

java.lang.NumberFormatException: For input string: " 31"
错误就在你面前。“31”不是有效数字。要修复它,您可以执行
map{it.trim().toInt()}
而不是
map{it.toInt()}

调用
split()
后,您将得到一个字符串数组。这些要素包括: “30”、“21”、“29”、“31”、“40”等。前三个数字可以,之后它们有一个额外的空格字符。“31”无法转换为整数

要删除空白,可以使用
trim()
函数

错误就在你面前。“31”不是有效数字。要修复它,您可以执行
map{it.trim().toInt()}
而不是
map{it.toInt()}

调用
split()
后,您将得到一个字符串数组。这些要素包括: “30”、“21”、“29”、“31”、“40”等。前三个数字可以,之后它们有一个额外的空格字符。“31”无法转换为整数


要删除空白,可以使用
trim()
函数。

上拆分字符串,
将保留空白。您可以在拆分后修剪所有字符串(就像其他答案所建议的那样),也可以在“逗号后面(或前面)加任意数量的空格”上拆分字符串。为此,您需要更改正在拆分的正则表达式。像这样:

val regex = "\\s*,\\s*".toRegex()
val series = lines.split(regex).map { it.toInt() }

上拆分字符串将保留空白。您可以在拆分后修剪所有字符串(就像其他答案所建议的那样),也可以在“逗号后面(或前面)加任意数量的空格”上拆分字符串。为此,您需要更改正在拆分的正则表达式。像这样:

val regex = "\\s*,\\s*".toRegex()
val series = lines.split(regex).map { it.toInt() }