如何使用java集合在字符串数组中存储数据
我已将数据存储在如何使用java集合在字符串数组中存储数据,java,arrays,list,guava,Java,Arrays,List,Guava,我已将数据存储在列表中,需要使用循环将这些数据存储到另一个字符串数组中。我已经创建了一个字符串数组(value),并在其中存储了数据,但问题是第一个元素在循环中被第二个元素替换,它将只显示循环末尾的最后一个元素 CSVReader reader = new CSVReader(new FileReader(csvfile)); List<String[]> data = reader.readAll(); String[] values = new String[5]; for (i
列表中,需要使用循环将这些数据存储到另一个字符串数组中。我已经创建了一个字符串数组(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
CSVReader reader=new-CSVReader(new-FileReader(csvfile));
List data=reader.readAll();
字符串[]值=新字符串[5];
对于(int i=1;i<5;i++){
值=data.get(i);
System.out.println(值[1]);//数据在这里被替换
}
System.out.println(值[1]);//这将仅显示最后存储的值
我认为您在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
CSVReader reader=new-CSVReader(new-FileReader(csvfile));
List data=reader.readAll();
字符串[]值=新字符串[5];
对于(int i=1;i<5;i++){
值[i]=data.get(i);
System.out.println(值[1]);//数据在这里被替换
}
System.out.println(值[1]);//这将仅显示最后存储的值
我认为您缺少for循环中第一行的“[I]”。我认为您在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
CSVReader reader=new-CSVReader(new-FileReader(csvfile));
List data=reader.readAll();
字符串[]值=新字符串[5];
对于(int i=1;i<5;i++){
值[i]=data.get(i);
System.out.println(值[1]);//数据在这里被替换
}
System.out.println(值[1]);//这将仅显示最后存储的值
我认为您缺少for循环中第一行的“[I]”。替换:
for (int i = 1; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
for(int i=1;i<5;i++){
值=data.get(i);
System.out.println(值[1]);//数据在此处被替换}
与:
for (int i = 0; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
for(int i=0;i<5;i++){
值=data.get(i);
System.out.println(值[1]);//数据在此处被替换}
更换:
for (int i = 1; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
for(int i=1;i<5;i++){
值=data.get(i);
System.out.println(值[1]);//数据在此处被替换}
与:
for (int i = 0; i < 5; i++) {
values = data.get(i);
System.out.println(values[1]); // data is getting replaced here}
for(int i=0;i<5;i++){
值=data.get(i);
System.out.println(值[1]);//数据在此处被替换}
列表是0
索引的,因此除非有意跳过第一个元素,否则不要在1
处开始循环迭代,而是在0
处开始循环迭代
是的,在循环后执行最后一次println
时,仅显示与最后一次字符串[]
相关的数据,因为在每次迭代中,您都在更新值,即值=数据。get(i)
以存储当前的字符串[]
,从而获得上述结果
您可能需要一个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));
列表是0
索引的,因此除非有意跳过第一个元素,否则不要在1
处开始循环迭代,而是在0
处开始循环迭代
是的,在循环后执行最后一次println
时,仅显示与最后一次字符串[]
相关的数据,因为在每次迭代中,您都在更新值,即值=数据。get(i)
以存储当前的字符串[]
,从而获得上述结果
您可能需要一个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));
//生成数据
列表数据=
Stream.iterate(0,n->n+1)
.限额(10)
.map(i->新字符串[]{“a”+i,“b”+i,“c”+i,“d”+i,“e”+i,“f”+i})
.collect(Collectors.toList());
字符串[][]值=新字符串[data.size()][];
//复制数据
对于(int i=0;i
//生成数据
列表数据=
Stream.iterate(0,n->n+1)
.限额(10)
.map(i->新字符串[]{“a”+i,“b”+i,“c”+i,“d”+i,“e”+i,“f”+i})
.collect(Collectors.toList());
字符串[][]值=新字符串[data.size()][];
//复制数据
对于(int i=0;i
数据变量包含字符串[](字符串数组)列表。for循环正在尝试将它们存储在单个字符串[]的值中
根据您尝试执行的操作,您可以按照注释建议执行操作,并创建二维字符串数组。然而,您想要从一个非常好的字符串[]列表中删除它们,这一事实让我相信您可能想要将它们放在一个大字符串[]中
下面是如何将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]);
//初始化测试数据
列表数据=新的ArrayList();
字符串[]a={“a1”,“a2”};
字符串[]b={“b1”,“b2”};
字符串[]c={“c1”,“c2”};
数据.添加(a);
数据.添加(b);
数据.添加(c);
//大N是你想要多少单词
int N=5;
//小n追踪有多少个单词有b