2016-04-22 157 views
0

我正在閱讀文本文件,並將我的對象(狗)的參數設置爲文本文件上的信息。這是一個非常簡單的任務,但每次嘗試訪問字段[1]或字段[2]時,我都會遇到數組越界的錯誤。我的代碼如下:數組越界與字符串拆分

BufferedReader inFile = new BufferedReader(new FileReader("dogslist.txt")); 
    String line = inFile.readLine(); 
    int count = 0; 
    Dogs[] parlour = new Dogs[16]; 

    while(line != null) 
    { 
    String[] field = line.split("#"); 
    int age = Integer.parseInt(field[2]); 
    parlour[count] = new Dogs(field[0],field[1],age); 
    System.out.println(parlour[count]); 
    count++; 
    line = inFile.readLine(); 
    } 

這裏是文本文件的內容:錯誤,文本文件和代碼的

Jerry#German Sheapord#4 
Owen#cat#3 
Morgan#MathsGenius#7 

文本文件:http://pastebin.com/SznqE45i

+0

你會在哪一行發生錯誤? – Hackerdarshi

+1

所以有空行? –

+0

文本文件中沒有任何空行。錯誤在代碼的第9行。 (int age = Integer.parseInt(field [2]);) –

回答

4

您可以通過爲您解決問題代碼中更多的「防禦」,並驗證每條輸入行是否包含內容,並且分割後的陣列與預期一致:

BufferedReader inFile = new BufferedReader(new FileReader("dogslist.txt")); 
    String line; 
    int count = 0; 
    Dogs[] parlour = new Dogs[16]; 

    while((line = inFile.readLine()) != null) 
    { 
     if(line.trim().length() > 0){ 
      String[] field = line.split("#"); 

      if(field.length < 3){ 
       System.out.println("Invalid line encountered: " + line); 
      } 
      else{ 
       int age = Integer.parseInt(field[2]); 
       parlour[count] = new Dogs(field[0],field[1],age); 
       System.out.println(parlour[count]); 
       count++; 
      } 
     } 
    } 
+0

這工作:)謝謝你的幫助。如果可以的話,你會介意告訴我爲什麼我的沒有?該文本文件沒有空行,因此修剪不是必需的,但除了代碼與我使用的代碼非常相似之外。 –

+0

我運行了你的原始代碼,除非在第一個有效行之前有一個空行,它就起作用了。原始文件中必須有一個空行。無論如何,添加防禦性代碼以防止無效輸入始終是一個不錯的主意,可以節省調試時間並生成更多優質代碼。 – pczeus

+0

我追捕了這個錯誤!基本上,文本文件看起來應該是完全一樣的,但我認爲當我編寫它時,我使用了Shift + Enter,然後輸入,這與readLines混淆了,但由於它只是一個文本文件,所以你不能看到區別 –