Kotlin中能否通过for循环创建数组?解决循环内列表外部无法使用及Excel读取问题
能否通过for循环创建数组/列表
完全可以。你提到的「列表定义在for循环内部就无法在外部调用」是Kotlin的变量作用域规则导致的:在{}包裹的代码块(比如for循环、if判断的花括号内部)中定义的变量属于该块的局部变量,仅在块内部生效,块外部无法访问。
你当前的写法已经规避了这个问题:你将listOfNames定义在了for循环的外层、函数作用域内,循环内部仅调用add方法向列表中追加元素,函数最终可以正常返回完整列表,完全匹配你「读取Excel内容存入列表、后续在main方法中调用」的需求。
现有代码可优化项
当前代码还有几个潜在问题可以调整,避免运行报错:
- 硬编码遍历0-10行容易遇到空行、空单元格报错,建议读取工作表实际行数,增加空值判断
- 文件流使用完需要关闭避免资源泄漏,可以用Kotlin的
use函数自动管理资源 listOfNames后续不会重新赋值,把var改成val更符合Kotlin编码规范
优化后的完整方法参考:
fun readFromExcelFile(filepath: String): ArrayList<String> { // 不需要重新赋值改成val val listOfNames = ArrayList<String>() val columnNumber = 0 // use函数会在逻辑执行完自动关闭输入流 FileInputStream(filepath).use { inputStream -> val xlWb = WorkbookFactory.create(inputStream) val xlWs = xlWb.getSheetAt(0) // 读取工作表实际最大行数 val lastRowNum = xlWs.lastRowNum for (i in 0..lastRowNum) { // 跳过空行、空单元格 val currentRow = xlWs.getRow(i) ?: continue val currentCell = currentRow.getCell(columnNumber) ?: continue listOfNames.add(currentCell.stringCellValue) } } return listOfNames }
main方法调用示例
fun main() { // 替换为你的Excel文件实际路径 val excelFilePath = "/xxx/xxx/名单.xlsx" val nameList = readFromExcelFile(excelFilePath) // 此处可正常使用读取到的所有内容 println("读取到的名称列表:$nameList") }
内容的提问来源于stack exchange,提问作者Jana
相关产品推荐
相关产品推荐

