在Java中存储每N行
您好,我不知道如何将csv文件中的每一行存储为Java中的一个元素,以便我可以检查同一列中的前一个元素。有人知道怎么做吗 以下是我想做的: 我正在研究一个数据帧,它看起来像 下面是它的样子:在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
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
}