从txt文件

时间:2016-11-12 15:48:03

标签: java error-handling indexoutofboundsexception

我的程序从txt文件读取,然后将txt信息转换为car对象并将它们添加到arraylist。

try {
     String filePath = "car.txt";
     File f = new File(filePath);
     Scanner sc = new Scanner(f);


     List<Car> car = new ArrayList<Car>();

     while(sc.hasNextLine()){
         String newLine = sc.nextLine();

         String[] details = newLine.split(" ");
         String brand = details[0];
         String model = details[1];
         double cost = Double.parseDouble(details[2]);
         Car c = new Car(brand, model, cost);
         Car.add(c);
     }

但是,如果txt文件中的一行不包含这三个组件,那么它会崩溃。如何检查该行是否包含所有3个组件,如果不打印消息则终止?

堆栈追踪 -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at Main.loadPerson(Main.java:31)
at Main.main(Main.java:12)

4 个答案:

答案 0 :(得分:0)

您需要检查length的详细信息是3,如果没有退出,如下所示:

     String[] details = newLine.split(" ");
     if(details.length != 3) {
       System.out.println("Incorrect data entered !! Please try again !!! ");
      return;
      } else {
       String brand = details[0];
       String model = details[1];
       double cost = Double.parseDouble(details[2]);
       Car c = new Car(brand, model, cost);
       Car.add(c);
     }

答案 1 :(得分:0)

您可以通过以下方式检查返回数组的长度:

int count = details.length;

然后决定做什么

答案 2 :(得分:0)

在访问元素之前检查长度,

尝试模式\\s+以避免修剪空格,代码中有一个拼写错误,其中将Car添加到汽车列表

    while (sc.hasNextLine()) {
        String newLine = sc.nextLine();
        String[] details = newLine.split("\\s+");
        if (details.length == 3) {
            String brand = details[0];
            String model = details[1];
            double cost = Double.parseDouble(details[2]);
            Car c = new Car(brand, model, cost);
            car.add(c);
        } else {
            System.out.println("Invalid input");
        }
    }

答案 3 :(得分:0)

如果文件不包含3个组件,则Transparent将为空。请改用它。

details