You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中ListBuffer存储Array[String]异常及二维集合需求问题

问题分析与解决方案

为什么内容会丢失?

你遇到的问题有两个核心原因:

  1. 类型不匹配导致的强制转换
    当你定义var fruits = new ListBuffer[String]()时,这个集合只能存储String类型的数据。但current_line_values_1是Array[String]类型,所以你不得不调用toString把数组转成字符串才能存入——而这个toString返回的是Java数组的默认对象标识(比如[Ljava.lang.String;@51dd09f),不是数组里的实际内容。

  2. Scala数组的默认toString行为
    Scala的Array本质上是Java数组的包装,它的默认toString方法不会遍历输出元素,只会返回数组的类名和内存哈希码,所以即使你存的是数组的字符串表示,也看不到实际内容。

如何正确实现存储Array[String]的二维集合?

方法1:使用正确类型的ListBuffer

如果你需要动态添加元素,先确保ListBuffer的泛型是Array[String],然后直接添加数组对象即可,不需要调用toString:

import scala.collection.mutable.ListBuffer

// 定义存储Array[String]的ListBuffer
val fruits = ListBuffer[Array[String]]()
// 直接添加数组对象,无需toString
fruits += current_line_values_1
fruits += current_line_values_2

// 遍历输出时,用mkString把数组转成可读字符串
fruits.foreach { arr =>
  println(arr.mkString("[", ", ", "]"))
}

方法2:直接生成不可变二维集合(更符合Scala风格)

如果不需要动态添加元素,直接把整个lines转换成二维数组/集合会更简洁:

// 直接将所有行处理成Array[Array[String]]
val twoDimArray: Array[Array[String]] = lines.map { line =>
  line.split("\\|", -1).map { x =>
    val trimmed = x.trim
    if (trimmed.isEmpty) "empty string" else trimmed
  }
}.toArray

// 遍历输出示例
twoDimArray.foreach { arr =>
  println(arr.mkString("[", ", ", "]"))
}

这样得到的twoDimArray就是你想要的二维集合,每个元素都是处理后的Array[String],可以直接访问其中的内容。

内容的提问来源于stack exchange,提问作者Ged

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:21:39