如何为CSV文件各列分配整数编号并按编号显示对应列?
实现CSV列编号查询功能
首先,你的代码里有两个小问题需要先修正:
- 变量名写错了:
st.readFileData()应该是stReader.readFileData() - CSV文件的每行包含多列数据,所以
readFileData()的返回值应该是List<List<String>>(外层List对应行,内层List对应每行的列),而不是List<String>,否则没法区分不同列。
接下来按需求实现功能:
步骤1:修正CSV读取逻辑
确保StockFileReader的readFileData()方法正确读取每行的列数据,示例实现如下:
public class StockFileReader { private String filePath; public StockFileReader(String filePath) { this.filePath = filePath; } public List<List<String>> readFileData() throws IOException { List<List<String>> rows = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { // 按逗号分割列,若列包含逗号/引号等特殊字符,建议用OpenCSV等专业库解析 List<String> columns = Arrays.asList(line.split(",")); rows.add(columns); } } return rows; } }
步骤2:实现列查询方法
修改你的方法,实现输入编号显示对应列的功能:
public void showColumn(int columnNumber) throws IOException { StockFileReader stReader = new StockFileReader(file); List<List<String>> allRows = stReader.readFileData(); if (allRows.isEmpty()) { System.out.println("CSV文件为空"); return; } // 转换为0基索引(用户输入的是1开始的编号) int columnIndex = columnNumber - 1; int totalColumns = allRows.get(0).size(); // 边界检查,防止输入的编号超出列范围 if (columnIndex < 0 || columnIndex >= totalColumns) { System.out.printf("无效的列编号!当前CSV共有%d列,请输入1-%d之间的数字%n", totalColumns, totalColumns); return; } // 遍历每行,输出对应列的内容 System.out.printf("第%d列的内容:%n", columnNumber); for (List<String> row : allRows) { if (columnIndex < row.size()) { System.out.println(row.get(columnIndex)); } else { System.out.println("(该行无此列数据)"); } } }
额外说明
- 若CSV列包含逗号、引号等特殊字符,不要用
split(",")解析,建议使用OpenCSV等成熟库处理,避免解析错误。 - 方法名改成
showColumn更贴合功能,原方法返回double不符合需求,因为我们只需要显示列内容,无需返回数值。
内容的提问来源于stack exchange,提问作者Amo
相关产品推荐
相关产品推荐

