Java读取CSV文件时为每个条目创建字符串的实现方案咨询
嘿,我看你现在需要把CSV里的每个条目都转成单独的字符串对吧?刚好可以基于你现有的代码调整实现,我给你整理一下方案~
调整后的代码:收集每个CSV条目为独立字符串
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public void scanFile() { // 用List存所有CSV条目对应的字符串,后续想用随时取 List<String> csvEntries = new ArrayList<>(); String currentEntry; try { Scanner sc = new Scanner(Gui.selectedFile); // 调整分隔符:匹配分号/双引号,同时跳过分隔符后的空白字符 sc.useDelimiter("[;\"]\\s*"); while (sc.hasNext()) { currentEntry = sc.next(); // 跳过空的无效条目(比如连续分隔符产生的) if (!currentEntry.trim().isEmpty()) { csvEntries.add(currentEntry); // 保留你原来找{9}的逻辑 if(currentEntry.equals("{9}")) { System.out.println("找到目标条目啦: {9}"); } } // 如果你还是需要判断是否遇到数字,可以保留这段逻辑 if (sc.hasNextInt()) { String numberEntry = String.valueOf(sc.nextInt()); csvEntries.add(numberEntry); System.out.println("遇到数字条目: " + numberEntry); } } sc.close(); // 可以在这里验证收集到的所有条目 System.out.println("\n所有收集到的CSV条目:"); for (String entry : csvEntries) { System.out.println("- " + entry); } } catch (Exception e) { System.out.println("读取文件出错啦: " + e.getMessage()); e.printStackTrace(); // 打印异常栈,方便调试 } }
几个关键调整说明:
- 新增集合存储:用
ArrayList<String>来保存每个扫描到的条目,这样你之后要遍历、处理这些字符串都很方便; - 优化分隔符:在原有的
[;\"]基础上加上\\s*,用来跳过分隔符后面的空格,避免收集到一堆没用的空字符串; - 过滤无效条目:通过
!currentEntry.trim().isEmpty()过滤掉因连续分隔符产生的空内容; - 完善异常处理:把原来的简单"error"改成带具体信息的输出,还加了异常栈打印,调试的时候能更快找到问题;
- 兼容数字条目:如果遇到数字,把它转成字符串后也加入集合,保证所有条目都是字符串类型。
要是你的CSV格式比较复杂(比如有些字段用双引号包裹,里面还包含分隔符),那建议用专门的CSV解析库(比如Apache Commons CSV或者OpenCSV),这些库能处理各种边缘情况;但如果是简单的CSV场景,上面的代码完全够用啦~
内容的提问来源于stack exchange,提问作者user7261540
相关产品推荐
相关产品推荐

