我已经将数据存储在List<String[]>
中,并且需要使用循环将这些数据存储到另一个String数组中。我创建了一个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
答案 0 :(得分:1)
0
索引,因此除非您有意跳过第一个元素,否则不要在1
而不是0
处开始循环迭代。println
时,仅显示与最后一个String[]
相关的数据,因为在每次迭代中,您都将values
即values = data.get(i);
更新为存储当前String[]
,因此存储上述结果。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));
答案 1 :(得分:1)
// generating data
List<String[]> data =
Stream.iterate(0, n -> n + 1)
.limit(10)
.map(i -> new String[]{"a" + i, "b" + i, "c" + i, "d" + i, "e" + i, "f" + i})
.collect(Collectors.toList());
String[][] values = new String[data.size()][];
// copy the data
for (int i = 0; i < data.size(); i++)
{
values[i] = data.get(i).clone();
}
//print the result
Arrays.stream(values).map(Arrays::toString).forEach(System.out::println);
答案 2 :(得分:0)
我认为您在for循环中有一个小错误。试试这个:
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[i] = 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
我认为您在for循环的第一行中缺少“ [i]”。
答案 3 :(得分:0)
替换:
for (int i = 1; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
使用:
for (int i = 0; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
答案 4 :(得分:0)
您的数据变量包含String [](字符串数组)的列表。您的for循环正在尝试将它们存储在单个String []的值中。
根据您要执行的操作,可以按照注释的建议进行操作,并创建2D String数组。但是,您实际上希望从一个非常好的String []列表中删除它们,这使我相信您可能希望将它们放在一个大String []中。
以下是如何将您从csv解析的前N个(在本例中为5个)单词放入values变量的示例。但是,如果您提供了代码段的最终用例,我们将能够为您提供更好的指导。
// initialize test data
List<String[]> data = new ArrayList<String[]>();
String[] a = {"a1", "a2"};
String[] b = {"b1", "b2"};
String[] c = {"c1", "c2"};
data.add(a);
data.add(b);
data.add(c);
// big N is how many words you want
int N = 5;
// little n tracks how many words have been collected
int n = 0;
String[] values = new String[N];
// loop through csv collect
for (int i = 0; i < data.size(); i++){
String[] cur = data.get(i);
// loop through the strings in each list entry
for (int j = 0; j < cur.length; j++){
// store value and increment counter
values[n] = cur[j];
n++;
// stop if maximum words have been reached
if (n >= N)
break;
}
// stop if maximum words have been reached
if (n >= N)
break;
}
for (int i = 0; i < values.length; i++)
System.out.println(values[i]);