如何在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。 先找他们