Java CSV解析库开发求助:用户输入报错及测试应用开发
解决CSV解析库的分隔符输入报错问题
首先咱们先聚焦你遇到的"Enter a delimiter"输入报错问题。通常这类错误的根源是未处理用户输入的异常情况(比如输入空值、多字符、特殊字符),或者读取输入的方式不对。我给你一个健壮的实现思路,附带示例代码:
常见问题与修复方案
假设你之前用Scanner读取输入时直接取第一个字符,比如这样的错误代码:
Scanner scanner = new Scanner(System.in); System.out.print("Enter a delimiter: "); char delimiter = scanner.next().charAt(0); // 这里如果用户输入空/回车会触发StringIndexOutOfBoundsException
修复后的输入处理逻辑
添加输入校验,确保只获取合法的单个分隔符:
import java.util.Scanner; public class CsvParserInputHandler { public static char getValidDelimiter() { Scanner scanner = new Scanner(System.in); char delimiter = '\0'; while (true) { System.out.print("Enter a delimiter (single character): "); String input = scanner.nextLine().trim(); // 校验输入是否为单个字符 if (input.length() == 1) { delimiter = input.charAt(0); break; } else { System.out.println("Error: Please enter exactly one character as delimiter!"); } } return delimiter; } }
这段代码会循环直到用户输入合法的单个字符,避免了索引越界这类常见报错。如果你的报错是其他类型(比如IO异常),可以补充具体的错误栈信息,我再帮你细化。
开发调用CSV解析库的测试应用
测试应用可以分为单元测试(验证库的核心逻辑)和命令行测试应用(模拟真实使用场景)两类:
1. 单元测试(用JUnit 5)
这是验证库功能正确性的关键,比如测试分隔符解析、特殊字段(含引号、换行)处理:
步骤:
- 确保你的CSV解析库有可测试的公共方法,比如
CsvParser.parse(String content, char delimiter) - 添加JUnit 5依赖到你的项目(比如Maven的pom.xml或Gradle配置)
- 编写测试类:
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class CsvParserTest { @Test void testParseWithCommaDelimiter() { String csvContent = "Name,Age,City\nAlice,30,New York\nBob,25,London"; CsvParser parser = new CsvParser(); // 假设parse方法返回List<List<String>>格式的解析结果 var result = parser.parse(csvContent, ','); assertEquals(3, result.size()); // 表头+2行数据 assertEquals("Alice", result.get(1).get(0)); assertEquals("30", result.get(1).get(1)); } @Test void testParseWithCustomDelimiter() { String csvContent = "Name;Age;City\nAlice;30;New York\nBob;25;London"; CsvParser parser = new CsvParser(); var result = parser.parse(csvContent, ';'); assertEquals("New York", result.get(1).get(2)); } }
2. 命令行测试应用
模拟用户真实使用流程,读取CSV文件/输入,调用你的解析库并输出结果:
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.List; public class CsvParserTestApp { public static void main(String[] args) { // 1. 获取合法分隔符 char delimiter = CsvParserInputHandler.getValidDelimiter(); // 2. 读取CSV文件(这里假设用户传入文件路径作为参数) if (args.length != 1) { System.out.println("Usage: java CsvParserTestApp <path-to-csv-file>"); System.exit(1); } try { File csvFile = new File(args[0]); String csvContent = Files.readString(csvFile.toPath()); // 3. 调用CSV解析库 CsvParser parser = new CsvParser(); List<List<String>> parsedData = parser.parse(csvContent, delimiter); // 4. 输出解析结果 System.out.println("\nParsed CSV Result:"); for (List<String> row : parsedData) { System.out.println(String.join(" | ", row)); } } catch (IOException e) { System.out.println("Error reading CSV file: " + e.getMessage()); } } }
运行这个应用时,只需要在命令行输入:java CsvParserTestApp your-file.csv,然后按照提示输入分隔符即可。
内容的提问来源于stack exchange,提问作者Trail Rain
相关产品推荐
相关产品推荐

