如何使用java在csv文件中重新生成特定列?

8ehkhllq  于 2021-08-25  发布在  Java
关注(0)|答案(3)|浏览(495)

关闭。这个问题需要更加关注。它目前不接受答案。
**想改进这个问题吗?**编辑这篇文章,更新这个问题,使它只关注一个问题。

三天前关门。
改进这个问题
我有一个csv文件(如图所示),如何使用java读取特定列(例如:age)并仅存储其值,而不将标题存储在 ArrayList ? 我不想使用任何依赖项,如opencsv或其他:
年龄数据编号1113423434344223232332

t3psigkw

t3psigkw1#

这基本上是一个简单,优雅的一行

  1. Files.readAllLines(Path.of("/path/to/your.csv")).stream().skip(1) //skip header
  2. .map(l -> l.split(";")[0]) // get first column i.e. age
  3. .collect(Collectors.toList()); // and get it as List
ukqbszuj

ukqbszuj2#

如果您想使用可以使用“;”的默认格式,这应该可以完成这项工作作为柱分离器。

  1. public static List<String> readOnlyOneColumn(String pathToCsv,String columnSeparator,int columnIndex)
  2. throws IOException
  3. {
  4. return Files.lines(Paths.get(pathToCsv)).skip(1).map(e -> e.split(columnSeparator)).map(columns -> columns[columnIndex]).collect(Collectors.toList());
  5. }
7jmck4yq

7jmck4yq3#

首先检查我们的 csv 文件格式,存在很多自定义格式。

  1. "String Header";"Numeric Header"
  2. "this is a string value";154566.52
  1. String Header;Numeric Header
  2. this is a string value;154566.52
  1. String Header\tNumeric Header
  2. this is a string value\t154566.52
  1. Files.readAllLines(Path.of("/path/to/your.csv")).stream().skip(1) //skip header
  2. .map(l -> l.split(";")[0]) // get first column i.e. age
  3. .collect(Collectors.toList()); // and get it as List
  1. BufferedReader reader = BufferedReader(new FileInputStreamReader("/path/to/your.csv"));
  2. reader.readLine();
  3. valuesArr = new ArrayList();
  4. while(reader.ready()) {
  5. String line = reader.readLine();
  6. valuesArr.add(line.split(";")[0]);
  7. }

这两种方式将分别输出以下结果:

  1. ["\"this is a string value\""]
  2. ["this is a string value"]
  3. ["this is a string value\t154566.52"]
展开查看全部

相关问题