首先,我在伴侣对象中创建空Array(Kotlin)实例 .
companion object {
var strarray: Array<String> = arrayOf()
var objectarray: LinkedHashMap<Int, List<Any>> = LinkedHashMap<Int, List<Any>>()
}
我希望我从CSV文件中读取textString时使用空数组实例 .
fun csvFileToString():String {
val inputStream = File(Paths.get("").toAbsolutePath().toString()
.plus("/src/main/SampleCSVFile_2kb.csv")).inputStream()
val reader = inputStream.bufferedReader()
var iterator = reader.lineSequence().iterator()
var index:Int = 1;
while (iterator.hasNext()){
var lineText:String = iterator.next()
strarray.set(index, lineText)
index++
}
return ""
}
但是当我运行该源代码时
a.csvFileToString()
println(CsvParser.strarray)
发生异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
strarray.set(index, lineText) <<<<<<<<< because of this line
我可以使用Array(来自kotlin集合),如ArrayList(来自java集合)吗?
2 回答
Array
的大小在创建时定义,无法修改 - 在您的示例中,它等于0
.如果要使用动态大小创建
Array
,则应使用ArrayList
.arrayOf
为您提供了一个数组 . 即使在Java中,数组也具有固定的长度 .listOf
为您提供了一个不可变列表 . 您无法在此列表中添加或删除项目 .您正在寻找的是
mutableListOf<String>
.在您当前的方法中,重用成员属性,不要忘记在每次使用之前清除列表 .
您的代码可以进一步简化(和改进),如下所示:
现在假设您想要使用输出列表但需要同时解析另一个文件 .
考虑使用纯函数(没有副作用,现在没有访问成员属性)并进一步简化它:
在这种情况下,我们可以完全跳过列表和数组,只需阅读文本:
我假设这首先是你想要的 .
Kotlin内置了许多有用的扩展功能 . 先找他们 .