如何在Kotlin中添加数组索引值?
首先,我在同伴对象中创建空数组(Kotlin)实例。
companion object { var strarray: Array = arrayOf() var objectarray: LinkedHashMap<Int, List> = LinkedHashMap<Int, List>() }
我希望从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
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 strarray.set(index, lineText) <<<<<<<<< because of this line
我可以使用Array(从kotlin集合)像ArrayList(从Java集合)?
Array
大小在创建时定义,不能修改 – 在你的例子中它等于0
。
如果你想创建动态大小的Array
,你应该使用ArrayList
。
-
arrayOf
给你一个数组。 即使在Java中,数组也有固定的长度。 -
listOf
给你一个不变的列表。 您无法在此列表中添加或移除项目。 -
你在找什么是
mutableListOf
。
在目前的方法中,重复使用成员属性,不要忘记在每次使用之前清除列表。
你的代码可以进一步简化(和改进),如下所示:
out.clear() inputStream.bufferedReader().use { reader -> // Use takes care of closing reader. val lines = reader.lineSequence() out.addAll(lines) // MutableList can add all from sequence. }
现在想象你想要使用输出列表,但需要同时解析另一个文件。
考虑努力实现一个纯粹的function (没有副作用,现在没有访问成员属性),甚至进一步简化:
fun csvFileToString(): String { // Now method returns something useful. val inputStream = File(Paths.get("").toAbsolutePath().toString() .plus("/src/main/SampleCSVFile_2kb.csv")).inputStream() inputStream.bufferedReader().use { return it.lineSequence().joinToString("\n") } }
在这种情况下,我们可以完全跳过列表和数组,然后阅读文本:
inputStream.bufferedReader().use { return it.readText() }
我假设这就是你想要的。
Kotlin内置了很多有用的扩展function。 先找他们