2016-11-12 84 views
0

我有我的程序从txt文件读取,然后将txt信息转换为汽车对象并将它们添加到数组列表中。从txt文件读取时的错误处理

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) 
+0

请出示访问元素之前的堆栈跟踪 – ItamarG3

+0

检查'details'的'length',你可能会得到'ArrayIndexOutOfBoundsException' – Saravana

回答

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); 
    } 
0

您可以从分裂检查返回数组的长度通过:

int count = details.length; 

然后决定怎么办

访问元素之前
0

检查长度,

尝试模式\\s+避免微调的空间,还有在你的代码一个错字,其中加入车来车名单

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"); 
     } 
    } 
0

如果文件不包含3个组件,那么details将为空。改用它。

if(details.length() != 3){ 
    System.out.println("Invalid .txt file!"); 
    break; 
}