在Java中存储每N行

在Java中存储每N行,java,arrays,csv,row,element,Java,Arrays,Csv,Row,Element,您好,我不知道如何将csv文件中的每一行存储为Java中的一个元素,以便我可以检查同一列中的前一个元素。有人知道怎么做吗 以下是我想做的: 我正在研究一个数据帧,它看起来像 下面是它的样子: shape id day hour week id footfall category area name 22496 22/3/14 3 12 634 Work cluster CBD area 1 22670 22/3/14 3

您好,我不知道如何将csv文件中的每一行存储为Java中的一个元素,以便我可以检查同一列中的前一个元素。有人知道怎么做吗

以下是我想做的:

我正在研究一个数据帧,它看起来像

下面是它的样子:

shape id day     hour week id footfall category          area name
22496   22/3/14  3    12      634      Work cluster     CBD area 1  
22670   22/3/14  3    12      220      Shopping cluster Orchard Road 1  
23287   22/3/14  3    12      723      Airport  Changi  Airport 2   
16430   22/3/14  4    12      947      Work cluster     CBD area 2  
4697    22/3/14  3    12      220      Residential area Ang Mo Kio 2    
4911    22/3/14  3    12      1001     Shopping cluster Orchard Rd 3    
11126   22/3/14  3    12      220      Residential area Ang Mo Kio 2    
等等。。。直到635行返回

我想将每个
小时
存储为元素,以便与其他数据集进行比较

以下是我迄今为止所做的工作:

package network;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class footfall {
    public static void main(String[] args) throws IOException {

    ArrayList<String> list = new ArrayList<>();

    // New BufferedReader.
    BufferedReader reader = new BufferedReader(new FileReader(
        "C:\\only18date.csv"));

    // Add all lines from file to ArrayList.
    while (true) {
        String line = reader.readLine();
        if (line == null) {
        break;
        }
        list.add(line);
    }

    // Close it.
    reader.close();

    // Print size of ArrayList.
    System.out.println("Lines: " + list.size());

    // Print each line.
    int size = list.size();
    for(int i=0; i < size; i++) {
    String[] data=(list.get(i)).split(",");
    String n= data[3];
    System.out.println(n);
    }  // so i can check every row with the previous value from the column.    // &  in order for me to check the previous value i can simply write n-1 or //something like that but im not sure how to do it :/
// i want to store every nth row from column 3 as an element
    }
    }
}
封装网络;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
公众阶级的脚步{
公共静态void main(字符串[]args)引发IOException{
ArrayList=新建ArrayList();
//新的BufferedReader。
BufferedReader reader=新BufferedReader(新文件读取器(
“C:\\only18date.csv”);
//将文件中的所有行添加到ArrayList。
while(true){
字符串行=reader.readLine();
如果(行==null){
打破
}
列表。添加(行);
}
//关上它。
reader.close();
//ArrayList的打印大小。
System.out.println(“行:+list.size());
//打印每一行。
int size=list.size();
对于(int i=0;i
您可以使用正则表达式以快速而肮脏的方式来实现这一点

示例(注意:为了自包含,它与您的代码略有不同)

注意

上述示例要求您的数据保持一致


如果您的小时数可以是
>9
,您可能需要使用
(\\d{1,2})
更改模式的
(\\d)
部分。您可以通过以下方式解决此问题:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class footfall {
    public static void main(String[] args) throws IOException {

        ArrayList<String> list = new ArrayList<>();

        // New BufferedReader.
        BufferedReader reader = new BufferedReader(new FileReader(
                "C:\\idafootfall.csv"));

        // Add all lines from file to ArrayList.
        String line;
        while ((line=reader.readLine())!=null)
            list.add(line);

        // Close it.
        reader.close();

        BufferedReader reader2 = new BufferedReader(new FileReader(
                "C:\\category.csv"));

        // Add all lines from file to ArrayList.
        Map<String,Category> map=new HashMap<String, Category>();
        String line2;
        while ((line2=reader2.readLine())!=null){
            String[] split=line2.split(",");
                try
                {
                  map.put(split[0], new                         Category(Double.valueOf(split[1]),Double.valueOf(split[2])));
               }
               catch(NumberFormatException e)
               {
               }

        }

        // Close it.
        reader2.close();

        // Print size of ArrayList.
        System.out.println("Lines: " + list.size());

        // Print each line.
        int size = list.size();
        int previousHour=0;
        List<String> elements = new ArrayList<String>();
        for (int i = 0; i < size; i++) {
            try
            {
            String[] data = (list.get(i)).split(",");
            System.out.println(data[2]);


            double newHourSum = Integer.parseInt(data[2]) - previousHour;
            double footfallHour = ( Integer.parseInt(data[2])/(newHourSum-previousHour)) * map.get(data[0]).foreigners;

            previousHour=Integer.parseInt(data[2]);
            // i want to store every nth row from column 3 as an element
          } catch(NumberFormatException e){}
        }
    }
}

class Category{
    Double foreigners;
    Double locals;

    public Category(Double foreigners,Double locals){
        this.foreigners=foreigners;
        this.locals=locals;
    }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公众阶级的脚步{
公共静态void main(字符串[]args)引发IOException{
ArrayList=新建ArrayList();
//新的BufferedReader。
BufferedReader reader=新BufferedReader(新文件读取器(
“C:\\idafootfall.csv”);
//将文件中的所有行添加到ArrayList。
弦线;
而((line=reader.readLine())!=null)
列表。添加(行);
//关上它。
reader.close();
BufferedReader Reader 2=新的BufferedReader(新文件读取器(
“C:\\category.csv”);
//将文件中的所有行添加到ArrayList。
Map Map=newhashmap();
弦线2;
而((line2=reader2.readLine())!=null){
String[]split=line2.split(“,”);
尝试
{
map.put(split[0],新类别(Double.valueOf(split[1]),Double.valueOf(split[2]);
}
捕获(数字格式)
{
}
}
//关上它。
reader2.close();
//ArrayList的打印大小。
System.out.println(“行:+list.size());
//打印每一行。
int size=list.size();
int-previousHour=0;
列表元素=新的ArrayList();
对于(int i=0;i
现在我已经实现了与链接中的版本类似的代码。
我希望它能帮上忙。

不太确定你想要什么,但看看这是否有帮助

    for (int i = 0; i < size; i+=n) { // Notice the i+=n to get every nth row.

        String[] data = (list.get(i)).split(",");
        System.out.println(data[3]);
        // i want to store every nth row from column 3 as an element
    }
for(inti=0;i

注意:您可以更改
i
的初始值,以调整所需的精确行。

我仍然不明白您所说的“n”行是什么意思。是否希望从整个数据集中(635行)获取第3行、第4行、第100行?csv文件是否随时间变化?你说“作为一个元素”。什么元素?列表设置还是阵列?谢谢你的关心!很抱歉,我所说的第n行的意思是,我希望从列中获取每一行作为元素,并将其存储在一个变量中,以便我可以使用它@费迪南德内曼谢谢你的回复!但是我的csv文件包含312行,如果我声明为字符串行,这将非常繁琐,我希望输出是垂直的。谢谢你的回复!但是为什么要初始化n=3呢?我所说的第n行是指我希望列的每一行都是一个元素,这样我就可以在后面使用它了。:)我想在后面使用它的原因是因为检查每一行的目的,所以我误解了你的问题。我希望编辑的版本就是您要搜索的。如果您将其添加到中,我如何使用元素?我想这样做:
for(int I=0;I
这样我就可以检查每个
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class footfall {
    public static void main(String[] args) throws IOException {

        ArrayList<String> list = new ArrayList<>();

        // New BufferedReader.
        BufferedReader reader = new BufferedReader(new FileReader(
                "C:\\idafootfall.csv"));

        // Add all lines from file to ArrayList.
        String line;
        while ((line=reader.readLine())!=null)
            list.add(line);

        // Close it.
        reader.close();

        BufferedReader reader2 = new BufferedReader(new FileReader(
                "C:\\category.csv"));

        // Add all lines from file to ArrayList.
        Map<String,Category> map=new HashMap<String, Category>();
        String line2;
        while ((line2=reader2.readLine())!=null){
            String[] split=line2.split(",");
                try
                {
                  map.put(split[0], new                         Category(Double.valueOf(split[1]),Double.valueOf(split[2])));
               }
               catch(NumberFormatException e)
               {
               }

        }

        // Close it.
        reader2.close();

        // Print size of ArrayList.
        System.out.println("Lines: " + list.size());

        // Print each line.
        int size = list.size();
        int previousHour=0;
        List<String> elements = new ArrayList<String>();
        for (int i = 0; i < size; i++) {
            try
            {
            String[] data = (list.get(i)).split(",");
            System.out.println(data[2]);


            double newHourSum = Integer.parseInt(data[2]) - previousHour;
            double footfallHour = ( Integer.parseInt(data[2])/(newHourSum-previousHour)) * map.get(data[0]).foreigners;

            previousHour=Integer.parseInt(data[2]);
            // i want to store every nth row from column 3 as an element
          } catch(NumberFormatException e){}
        }
    }
}

class Category{
    Double foreigners;
    Double locals;

    public Category(Double foreigners,Double locals){
        this.foreigners=foreigners;
        this.locals=locals;
    }
}
    for (int i = 0; i < size; i+=n) { // Notice the i+=n to get every nth row.

        String[] data = (list.get(i)).split(",");
        System.out.println(data[3]);
        // i want to store every nth row from column 3 as an element
    }