首页 文章

如何在Kotlin中添加Array索引值?

提问于
浏览
2

首先,我在伴侣对象中创建空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 回答

  • 3

    Array 的大小在创建时定义,无法修改 - 在您的示例中,它等于 0 .

    如果要使用动态大小创建 Array ,则应使用 ArrayList .

  • 1
    • arrayOf 为您提供了一个数组 . 即使在Java中,数组也具有固定的长度 .

    • listOf 为您提供了一个不可变列表 . 您无法在此列表中添加或删除项目 .

    • 您正在寻找的是 mutableListOf<String> .

    在您当前的方法中,重用成员属性,不要忘记在每次使用之前清除列表 .

    您的代码可以进一步简化(和改进),如下所示:

    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.
    }
    

    现在假设您想要使用输出列表但需要同时解析另一个文件 .

    考虑使用纯函数(没有副作用,现在没有访问成员属性)并进一步简化它:

    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内置了许多有用的扩展功能 . 先找他们 .

相关问题