提问人:reem ahmad 提问时间:7/7/2021 最后编辑:reem ahmad 更新时间:7/9/2021 访问量:693
如何使用 java 在 CSV 文件中重新定义特定列?[已结束]
How can I rea a specific column in a CSV file using java? [closed]
问:
我有一个 CSV 文件(如图所示),如何使用 java 读取特定列(例如:age)并仅存储其值而没有标题?
我不想使用任何依赖项,例如 OpenCSV 或其他:ArrayList
年龄 | 数据 | 数字 |
---|---|---|
111 | 3434 | 2343 |
3444 | ||
2232 | ||
32332 |
答:
0赞
Alan Ferreira
7/7/2021
#1
首先检查我们的文件格式,存在很多自定义格式。csv
"String Header";"Numeric Header"
"this is a string value";154566.52
String Header;Numeric Header
this is a string value;154566.52
String Header\tNumeric Header
this is a string value\t154566.52
Files.readAllLines(Path.of("/path/to/your.csv")).stream().skip(1) //skip header
.map(l -> l.split(";")[0]) // get first column i.e. age
.collect(Collectors.toList()); // and get it as List
BufferedReader reader = BufferedReader(new FileInputStreamReader("/path/to/your.csv"));
reader.readLine();
valuesArr = new ArrayList();
while(reader.ready()) {
String line = reader.readLine();
valuesArr.add(line.split(";")[0]);
}
这两种方式将分别输出结果:
["\"this is a string value\""]
["this is a string value"]
["this is a string value\t154566.52"]
评论
0赞
markspace
7/7/2021
这将适用于给定的输入,但通常不适用于 CSV 文件。可以引用 CSV 条目,在这种情况下,处理方式不同。
0赞
Alan Ferreira
7/7/2021
是的,这是正确的,但对于这种情况,开发人员必须检查 CSV 文件以跳过“ ' 字符
2赞
Julian Kreuzer
7/7/2021
#2
如果您想使用默认格式,这应该可以完成工作,您可以使用“;”作为列分隔符。
public static List<String> readOnlyOneColumn(String pathToCsv,String columnSeparator,int columnIndex)
throws IOException
{
return Files.lines(Paths.get(pathToCsv)).skip(1).map(e -> e.split(columnSeparator)).map(columns -> columns[columnIndex]).collect(Collectors.toList());
}
1赞
Hasasn
7/7/2021
#3
它基本上是一个简单、优雅的衬里
Files.readAllLines(Path.of("/path/to/your.csv")).stream().skip(1) //skip header
.map(l -> l.split(";")[0]) // get first column i.e. age
.collect(Collectors.toList()); // and get it as List
评论