Java实现将CSV文件中逗号分隔数字转为单元素数组
解决CSV文件数字拆分到单元素数组的问题
我的问题:
我有一个List,每个索引里存着用逗号分隔的多个数字(除最后一个数字外都以逗号分隔),想把所有数字转移到新数组中,每个数字占单独索引。另外我觉得当前读取data.csv的方式可能不合理,需要全新实现方案。
原Main类代码:
public static void main(String[] args) throws FileNotFoundException { String file = "data.csv"; String line; List<String> list = new ArrayList<String>(); int i = 0; try (BufferedReader br = new BufferedReader(new FileReader(file))) { while((line = br.readLine()) != null){ //System.out.println(line); list.add(i, line); i++; } } catch (Exception e){ System.out.println(e); } }
data.csv文件内容:
20,16,23,20,2,17,9,16,0,6 20,18,16,4,10,9,4,10,16,16 3,6,19,14,14,0,5,22,4,15 19,22,6,18,9,12,15,9,25,14 20,0,1,20,6,19,20,16,15,6 13,1,6,1,4,22,3,11,1,12 10,9,20,7,21,22,3,14,1,8 25,19,21,14,15,16,25,17,6,14 0,20,10,1,3,24,24,5,10,24 2,13,0,9,18,5,21,2,24,21 17,4,16,6,22,14,15,5,10,20 6,15,10,8,10,10,16,22,15,22 2,1,3,25,15,19,0,13,7,17 24,20,6,7,3,3,12,22,23,17 12,10,10,14,2,18,21,5,21,3 13,9,20,11,8,3,23,5,5,3 4,18,4,9,1,2,24,21,23,3 3,3,2,19,6,19,1,10,5,4 13,0,12,19,24,7,10,18,18,1 0,7,10,2,22,20,21,4,3,11
预期结果:
Data[0] = 20 Data[1] = 16 Data[2] = 23 Data[10] = 20 Data[11] = 18
解决方案
直接优化读取流程,在读取每行时就拆分数字并存储,无需先保存整行内容:
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { String file = "data.csv"; List<Integer> dataList = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader(file))) { String line; while ((line = br.readLine()) != null) { // 按逗号拆分每行字符串,trim处理可能的空格 String[] numberStrings = line.split(","); for (String numStr : numberStrings) { // 将字符串转为整数存入List,若需保留字符串直接add(numStr.trim())即可 dataList.add(Integer.parseInt(numStr.trim())); } } } catch (Exception e) { e.printStackTrace(); } // 将List转为数组(按需选择) Integer[] dataArray = dataList.toArray(new Integer[0]); // 验证结果 System.out.println("Data[0] = " + dataArray[0]); System.out.println("Data[1] = " + dataArray[1]); System.out.println("Data[2] = " + dataArray[2]); System.out.println("Data[10] = " + dataArray[10]); System.out.println("Data[11] = " + dataArray[11]); } }
关键说明
- 省略了先存储整行的中间List,直接在读取时处理每行数据,更高效
- 使用
split(",")拆分每行的数字字符串,trim()避免因CSV中可能存在的空格导致转换错误 - 可根据需求选择存储为
Integer类型(数字运算更方便)或String类型 - 最后通过
toArray()方法将List转为数组,满足每个数字单独占索引的需求
内容的提问来源于stack exchange,提问作者luan_navarro
相关产品推荐
相关产品推荐

