java - 如何使用java集合将数据存储在字符串数组中

标签 java arrays list guava

我已将数据存储在 List<String[]> 中并且需要使用循环将这些数据存储到另一个字符串数组中。我创建了一个字符串数组( value )并在其中存储数据,但问题是第一个元素在循环内被第二个元素替换,并且它只会显示循环末尾的最后一个元素。

CSVReader reader = new CSVReader(new FileReader(csvfile));
List<String[]> data = reader.readAll();
String[] values = new String[5];
for (int i = 1; i < 5; i++) {
    values = data.get(i);
    System.out.println(values[1]); // data is getting replaced here
}
System.out.println(values[1]); // this will show only the last stored value

最佳答案

  1. 列表采用 0 索引,因此除非您有意跳过第一个元素,否则不要在 1 处而不是 0 处开始循环迭代>.
  2. 是的,在循环后执行最后一个 println 时,仅显示与最后一个 String[] 相关的数据,因为在每次迭代中您都会更新values = data.get(i); 来存储当前的 String[],从而得到上述结果。
  3. 您可能需要一个 String[][] 而不是 String[],因为每个 String[] 代表文件的一行.

因此,假设您只想从 data 获取前五行,您可以这样做:

String[][] lines = data.subList(0, 5).toArray(String[][]::new);

或者对于所有读取的行:

String[][] lines = reader.readAll().toArray(String[][]::new);

您可以使用以下方法进行测试:

System.out.println(Arrays.deepToString(lines));

关于java - 如何使用java集合将数据存储在字符串数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53964361/

相关文章:

java - 当 getter 方法为我做同样的工作时,为什么我需要 setter 方法?

c++ - 使用 find_if 查找结构内部的 int for std::list with structs

python - 按字符串中正斜杠的数量对以字符串为值的字典进行排序

c++ - 动态数组和函数

javascript - Lodash,检查对象是否存在以及属性是否存在且为 true

c++ - std::list 中无锁的并行追加和迭代

JavaParser:从 FieldDeclaration 获取字段名称

java - Android OpenVPN 连接

java - 内容相同但 JUnit 测试失败(IntelliJ)

java - 执行k次操作后如何最小化最终数组中元素的总和