Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java集合在字符串数组中存储数据_Java_Arrays_List_Guava - Fatal编程技术网

如何使用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