使用Java Scanner读取CSV文件并将表头与数据存入ArrayList的问题
用Scanner解析CSV并存储表头和数据到ArrayList
我来帮你搞定这个CSV解析的需求!你的核心需求是用Scanner把CSV的表头和对应数据分别存入两个ArrayList,同时指定分号(;)和双引号(")作为分隔符,咱们一步步来实现:
核心思路
- 配置Scanner的分隔符:用正则表达式
[\";]来匹配分号或双引号,刚好符合你的要求。 - 逐行处理CSV:第一行是表头,存入
names列表;第二行是数据,存入values列表。 - 过滤无效值:分割后可能会出现空字符串(比如字段前后的双引号或分号导致的),所以要过滤掉这些空内容,同时处理字段前后的空格。
完整代码实现
import java.util.ArrayList; import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class CsvScanner { private static Scanner sc; ArrayList<String> names = new ArrayList<String>(); ArrayList<String> values = new ArrayList<String>(); public void parseCsv(String filePath) { try { // 初始化Scanner读取CSV文件 sc = new Scanner(new File(filePath)); // 配置分隔符:匹配分号(;)或双引号(") sc.useDelimiter("[\";]"); // 处理表头行 if (sc.hasNextLine()) { Scanner lineScanner = new Scanner(sc.nextLine()); lineScanner.useDelimiter("[\";]"); while (lineScanner.hasNext()) { String item = lineScanner.next().trim(); // 只添加非空的有效内容 if (!item.isEmpty()) { names.add(item); } } lineScanner.close(); } // 处理数据行 if (sc.hasNextLine()) { Scanner lineScanner = new Scanner(sc.nextLine()); lineScanner.useDelimiter("[\";]"); while (lineScanner.hasNext()) { String item = lineScanner.next().trim(); if (!item.isEmpty()) { values.add(item); } } lineScanner.close(); } } catch (FileNotFoundException e) { // 处理文件找不到的异常 System.err.println("找不到指定的CSV文件:" + e.getMessage()); } finally { // 确保Scanner资源被关闭 if (sc != null) { sc.close(); } } } // 测试用例 public static void main(String[] args) { CsvScanner csvHandler = new CsvScanner(); // 替换成你的CSV文件路径 csvHandler.parseCsv("test.csv"); System.out.println("表头列表: " + csvHandler.names); System.out.println("数据列表: " + csvHandler.values); } }
关键细节说明
- 分隔符正则
[\";]:方括号表示匹配其中任意一个字符,这里就是分号和双引号,完美符合你的分隔需求。 - 逐行处理的原因:直接用
sc.next()会跨行读取,而我们需要严格区分表头行和数据行,所以用sc.nextLine()先拿到整行,再用一个新的Scanner处理该行内容。 - trim()和非空判断:CSV里可能存在字段前后的空格,或者分隔符连续出现导致的空字符串,这两步能保证存入列表的都是有效内容。
- 资源关闭和异常处理:finally块确保Scanner被关闭,避免资源泄漏;捕获
FileNotFoundException能友好提示文件不存在的问题。
内容的提问来源于stack exchange,提问作者user7261540
相关产品推荐
相关产品推荐

