ArrayIndexOutOfBoundsException-Java-无循环打印

ArrayIndexOutOfBoundsException-Java-无循环打印,java,csv,exception,Java,Csv,Exception,我有一种方法,读取本地CSV文件并将其存储在数组中。当我试图打印数组的一个索引时,我一直得到ArrayIndexOutOfBoundsException 方法: public void getCsv() throws FileNotFoundException{ String fileName = "ADCSV.csv"; File file = new File(fileName); Scanner inputStream = new Scanner(file

我有一种方法,读取本地CSV文件并将其存储在数组中。当我试图打印数组的一个索引时,我一直得到ArrayIndexOutOfBoundsException

方法:

   public void getCsv() throws FileNotFoundException{

    String fileName = "ADCSV.csv";
    File file = new File(fileName);

    Scanner inputStream = new Scanner(file);

    while(inputStream.hasNext()){

        String data = inputStream.next();

         //array of strings
        String[] values = data.split(",");
        System.out.println(values[4]);


    }

    inputStream.close();

}
csv中的所有信息都存储为常规文本。当我尝试打印时,这是输出:

    "adminCount"
    "1"
    "0"
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at csvTest.test.getCsv(test.java:36)
    at csvTest.test.main(test.java:19)
它开始读取特定列中的值。然后它会出错

我觉得我已经关注这个问题有一段时间了,现在我已经不再关注这个问题了

谢谢

将您的方法更改为:

public void getCsv() throws FileNotFoundException {

    String fileName = "ADCSV.csv";
    File file = new File(fileName);

    Scanner inputStream = new Scanner(file);

    while (inputStream.hasNext()) {

        String data = inputStream.next();

        // array of strings
        String[] values = data.split(",");
        if (values.length < 5) {
            System.err.println("not enough values: ");
            for (int i = 0; i < values.length; i++) {
                System.err.println("value " + i + ": " + values[i]);
            }
            continue;
        }
        System.out.println(values[4]);

    }

    inputStream.close();

}
public void getCsv()引发FileNotFoundException{
字符串fileName=“ADCSV.csv”;
文件=新文件(文件名);
扫描仪输入流=新扫描仪(文件);
while(inputStream.hasNext()){
字符串数据=inputStream.next();
//字符串数组
字符串[]值=data.split(“,”);
如果(值。长度<5){
System.err.println(“值不足:”);
对于(int i=0;i
这应该说明问题所在。我的意思是它会打印出出错行的值。因为我们不知道到底是什么导致了错误,这将是一个开始。也许某个地方有一个逗号,它不应该在那里,或者它不见了。
如果本地CSV文件的内容可能包含错误,则应检查拆分行的长度并设置错误处理

如果CSV中没有少于5项的行,我猜最后一行是空的,并且仍在读取中。如果您喜欢比猜测更好的内容,请包含您的CSV。显然,并非所有行都有5个元素。您是否检查了
值实际包含的内容?您的CSV文件看起来如何?如果值包含像
aa、bb-bb、cc、d、e、f这样的空格,则
next()
将只返回
aa、bb
,因为
bb-bb
之间有空格。要解决它,您需要
nextLine()
而不是
next()
。另外,请不要忘记,
split
会删除尾随的空字符串。所以
“a,b,,,”.split(“,”)
将返回数组
[a,b]
而不是
[a,b,,]
。要解决这个问题,你可以使用
split(“,”,-1)
@Carcigenicate是的,我刚刚通过调试器运行了它,所有行都至少有5个元素,并且值都由整个CSV填充。我不能发布屏幕截图,或者我会发布其中一个调试器。@blur.P这不可能。您有
ArrayIndexOutOfBoundsException:4
。我只能看到一个地方进行索引,而您使用的硬编码4与异常匹配。再看一遍数据。真的,你应该解释你的答案,而不是假设它是不言而喻的。这似乎只是捕获错误的解析,而不是实际修复解析。