【问题标题】:"main" java.lang.ArrayIndexOutOfBoundsException: 3 [duplicate]“主要”java.lang.ArrayIndexOutOfBoundsException:3 [重复]
【发布时间】:2015-03-24 18:45:01
【问题描述】:

我想提取 CSV 文件的特定单列值。所以我使用了 CSV 文件的数据集,实例数:45211,属性数:17。 我曾尝试使用此代码..但它给了我这样的错误.. “主” java.lang.ArrayIndexOutOfBoundsException: 3

请帮帮我...

 import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    public class Main {

        public static void main(String[] args) {
            // TODO code application logic here

            String filename ="bank-full.csv";
            File file= new File(filename);

            try {

                Scanner inputStream = new Scanner(file);
                inputStream.next();
                 while(inputStream.hasNext())
                {
                    String data= inputStream.next();
                    String[] values = data.split(",");
                   // double balance= Double.parseDouble(values[2]);
                    System.out.println(values[3]);
                }           

                    inputStream.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

【问题讨论】:

  • 在抛出异常的那一行放一个断点。在调试模式下运行该类并观察其访问引发异常的变量的值。在这种情况下,它是数组。
  • 你调试过,检查过'values'的实际值吗?你检查你是否使用了正确的分隔符?试图遍历数组以检查(数量)值?
  • 感谢所有帮助我...我完成了..

标签: java csv stream filestream opencsv


【解决方案1】:

我假设你想一次读一行:

    Scanner inputStream = new Scanner(file);

    while(inputStream.hasNextLine())
    {
        String data = inputStream.nextLine();
        String[] values = data.split(",");
        System.out.println(values[3]); // now, this line is safe only if you are 
                                       // sure that each row would have at least 3 commas
    }  

【讨论】:

    【解决方案2】:

    (1) 你确定文件中的分隔符是逗号吗?

    (2) 文件中可以有空的“列”吗?如果有,请使用以下方法进行拆分:

    String[] values = data.split(",", -1);
    

    【讨论】:

    • 不存在缺失值...
    • 您能否发布失败的行(在文件中)?尝试打印字符串数据 (=inputStream.next()) 并向我们提供最后打印的行。
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2013-12-18
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多