如何读取CSV文件的内容并将其放入Java中的2D数组中?

如何读取CSV文件的内容并将其放入Java中的2D数组中?,java,arrays,csv,multidimensional-array,Java,Arrays,Csv,Multidimensional Array,我只想问一下如何读取CSV文件的内容并将其放入2D数组 我的CSV文件的内容每行包含7列(以逗号分隔“,”)。另一方面,行之间用破折号/连字符“-”分隔。但是请注意,行仍然在同一行上(当有一个破折号/连字符分隔7列(每行)时,它们才被识别) (CSV文件上显示的内容是用户输入的,这意味着用户为每行的列输入7个值。) 我的问题是,每当用户输入完第一行的值时,我就会得到一个java.lang.ArrayIndexOutOfBoundsException:7,它来自我的readCustomerCSV

我只想问一下如何读取CSV文件的内容并将其放入2D数组

我的CSV文件的内容每行包含7列(以逗号分隔“,”)。另一方面,行之间用破折号/连字符“-”分隔。但是请注意,行仍然在同一行上(当有一个破折号/连字符分隔7列(每行)时,它们才被识别)

(CSV文件上显示的内容是用户输入的,这意味着用户为每行的列输入7个值。)

我的问题是,每当用户输入完第一行的值时,我就会得到一个java.lang.ArrayIndexOutOfBoundsException:7,它来自我的readCustomerCSV函数中声明的2D数组的7列(我计划在其中插入CSV文件的值)

函数的具体行是:read2DString[read2DStringIndex][g]=fromfile[g]

以下是我的源代码:

public void writeCustomerCSV(){//此代码段中的所有内容都可以正常工作(它创建了一个CSV文件,用于存储用户的输入)
试一试{
BufferedWriter bw=新的BufferedWriter(新文件编写器(“C:\\Users\\RALPH\\Documents\\Database Java CSV\\customers.CSV”);
StringBuilder sb=新的StringBuilder();
int-y;
对于(int x=0;x

在我的代码中是否有我遗漏的东西,或者我的方法不够好?

在将数据解析为2D数组之前,代码循环通过一个1D数据数组,最终的每一行都由破折号分隔。当您到达for循环时,代码将破折号视为第8列,在
read2DString[read2DStringIndex][g]行中=fromfile[g]
,因为g表示索引7。只有在之后,代码才会增加行数。要解决此问题,您需要将if语句放在此行之前,然后使用“continue;”跳到循环的下一次迭代以绕过此问题

当增加行时,还必须将列重置为0,而不是
read2DString[read2DStringIndex][g]=fromfile[g]

,使用
read2DString[read2DStringIndex][g%8]=fromfile[g]
。模数运算符(%)将在除法后为您提供余数,在本例中,这是在将已完成行的长度除以相当于列的长度后的正确列数。

I可能是错误的,但它看起来像是在第7个索引处代表新行的破折号(列表中的第8项)在添加到read2DString时将触发越界异常(g将等于7,这是越界的,因为列表需要第8列)。我假设解决方案是先使用if语句,然后使用continue语句中断迭代,然后再将其添加到数组中以绕过问题。基本上,您的程序在转到下一行之前将“-”视为第8列。该“第8列”我尝试将声明的7更改为8,但仍然得到ArrayIndexOutOfBounds,特别是它声明java.lang.ArrayIndexOutOfBoundsException:8您还必须使用模运算符(%)要在每行之后将列重置为0哦,好的,我将使用模运算符,但我将把它放在代码的哪一部分?哦,我的!!!它工作了,没有出现任何越界异常!!!非常感谢@Moshe Goldberg!!当出现问题时我会更新你,但再次非常感谢!!这是修改后的结构,就像我下面所说的一样降低了您的概念:String[]read2DString=new String[10][8];//将其更改为8然后..for(int g=0;g