如何用OpenCSV在Java中读取CSV文件第一列的后6位数字
解决方案
先修正原代码的语法问题
你的原代码存在多处语法错误,比如:
- 构造方法内部不能定义
main方法 FileReader的文件名参数未加引号,且缺少具体文件路径/名称CSVReader实例化语句缺少右括号- 泛型声明错误,
readAll()返回的是List<String[]>而非List<String> - 输出语句
Sop是不规范简写,应该用System.out.println - 使用了中文引号
“”,需替换为英文引号""
实现需求的完整代码
假设你使用的是OpenCSV的CSVReader(若未引入依赖,需先添加对应依赖),以下是实现打印第一列最后6位的代码:
import com.opencsv.CSVReader; import java.io.FileReader; import java.io.IOException; import java.util.List; public class CSVProcessor { public static void main(String[] args) { // 替换为你的CSV文件实际路径 String filePath = "your_csv_file.csv"; try (CSVReader csvReader = new CSVReader(new FileReader(filePath))) { List<String[]> lines = csvReader.readAll(); // 打印自定义表头 System.out.println("Account number"); // 遍历数据行(跳过表头行) for (int i = 1; i < lines.size(); i++) { String[] line = lines.get(i); String accountNumber = line[0]; // 截取最后6位,增加长度判断避免索引越界 String lastSixDigits = accountNumber.length() >= 6 ? accountNumber.substring(accountNumber.length() - 6) : accountNumber; System.out.println(lastSixDigits); } } catch (IOException e) { e.printStackTrace(); } } }
关键逻辑说明
- 表头处理:直接打印需求指定的
Account number,替换原CSV的AccountNumber表头 - 数据截取:对每行第一列的账号字符串,用
substring(accountNumber.length() - 6)获取最后6位;同时增加长度判断,避免账号长度不足6位时抛出异常 - 资源管理:使用try-with-resources自动关闭
CSVReader和FileReader,避免资源泄漏
输出结果
运行代码后会得到你预期的输出:
Account number 567890 678901
内容的提问来源于stack exchange,提问作者gig
相关产品推荐
相关产品推荐

