2016-09-29 31 views
2

我試圖讀取.TXT文件的值並將這些值存儲在各種向量中(文件中的值用逗號分隔,我使用.Split()方法爲了得到這些值),我看到的問題是,在第一次寫入後,我的矢量aux超過了限制。向量在閱讀TXT文件時出界

的代碼:

String[] iltxt = new String[49]; 
String[] ertxt = new String[49]; 
String[] tcsetxt = new String[49]; 
String[] arttxt = new String[49]; 
String[] rmtxt = new String[49]; 
String[] burtxt = new String[49]; 
String[] toftxt = new String[49]; 
String[] atgtxt = new String[49]; 
String[] nrtxt = new String[49]; 
String[] hlab27txt = new String[49]; 
String[] djtxt = new String[49]; 
String[] dltxt = new String[49]; 
String[] rctxt = new String[49]; 
String[] dctxt = new String[49]; 
String[] mobtxt = new String[49]; 
String[] dtstxt = new String[49]; 
String[] sintxt = new String[49]; 
String[] diagnosticotxt = new String[49]; 
String[] aux = new String[18]; 
int cont = 1; 
     try { 
     FileReader arq = new FileReader("File.txt"); 
     BufferedReader lerArq = new BufferedReader(arq); 
     String linha = lerArq.readLine(); 
     aux = linha.split(","); 
     //STORES THE VALUES OF THE FIRST LINE INTO THE VECTORS 
     dltxt[0] = aux[0]; 
     rctxt[0] = aux[1]; 
     dctxt[0] = aux[2]; 
     mobtxt[0] = aux[3]; 
     dtstxt[0] = aux[4]; 
     iltxt[0] = aux[5]; 
     ertxt[0] = aux[6]; 
     tcsetxt[0] = aux[7]; 
     arttxt[0] = aux[8]; 
     rmtxt[0] = aux[9]; 
     burtxt[0] = aux[10]; 
     toftxt[0] = aux[11]; 
     sintxt[0] = aux[12]; 
     atgtxt[0] = aux[13]; 
     nrtxt[0] = aux[14]; 
     hlab27txt[0] = aux[15]; 
     djtxt[0] = aux[16]; 
     diagnosticotxt[0] = aux[17]; 
     //CLEAN THE VECTOR AUX TO THE NEXT READ 
     aux = null; 
     while (linha != null) { 
      //READ THE VALUES OF THE SECOND TO THE LAST LINE AND STORES INTO THE VECTORS 
      linha = lerArq.readLine(); 
      aux = linha.split(","); 
      dltxt[cont] = aux[0]; 
      rctxt[cont] = aux[1]; 
      dctxt[cont] = aux[2]; 
      mobtxt[cont] = aux[3]; 
      dtstxt[cont] = aux[4]; 
      iltxt[cont] = aux[5]; 
      ertxt[cont] = aux[6]; 
      tcsetxt[cont] = aux[7]; 
      arttxt[cont] = aux[8]; 
      rmtxt[cont] = aux[9]; 
      burtxt[cont] = aux[10]; 
      toftxt[cont] = aux[11]; 
      sintxt[cont] = aux[12]; 
      atgtxt[cont] = aux[13]; 
      nrtxt[cont] = aux[14]; 
      hlab27txt[cont] = aux[15]; 
      djtxt[cont] = aux[16]; 
      diagnosticotxt[cont] = aux[17]; 
      //CLEAN THE AUX VECTOR 
      aux = null; 
      //INCREMENT THE COUNTER TO SAVE VALUES IN THE NEXT POSITIONS OF THE VECTORS 
      cont++; 
     } 
     arq.close(); 
     } catch (IOException e) { 
      System.err.printf("Error while open the file: %s.\n", 
      e.getMessage()); 
     } 

的TXT文件的值:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 

的行:

Sim,Sim,Sim,Ilimitado,Sim,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Ausente,Moderado,Não,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Ausente,Moderado,Não,Não,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Moderado,Importante,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Muito Importante,Muito Importante,Importante,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Muito Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática 

Sim,Não,Sim,Normal,Sim,Moderado,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Sim,Sim,Limitado,Sim,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Importante,Ausente,Leve,Sim,Sim,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Leve,Muito Importante,Não,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática 

Sim,Não,Não,Normal,Não,Moderado,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Sim,Artrite Reumatica 

Sim,Sim,Não,Normal,Sim,Ausente,Moderado,Leve,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Importante,Ausente,Não,Não,Não,Sim,Não,Não,Sim,Sim,Não,Não,Artrite Reumatica 

Sim,Sim,Não,Normal,Não,Leve,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Moderado,Moderado,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Importante,Importante,Moderado,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Sim,Sim,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Não,Normal,Sim,Ausente,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Importante,Moderado,Não,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Ausente,Não,Não,Não,Sim,Sim,Não,Não,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Importante,Moderado,Moderado,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Ausente,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumática 

Sim,Sim,Não,Limitado,Sim,Leve,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Importante,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Sim,Não,Limitado,Não,Importante,Moderado,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Moderado,Não,Sim,Sim,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Não,Limitado,Sim,Importante,Muito Importante,Importante,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Artrite Reumática 

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Moderado,Não,Sim,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Sim,Limitado,Não,Moderado,Muito Importante,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Positivo,Sim,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Sim,Não,Normal,Não,Ausente,Ausente,Não,Não,Sim,não,Não,Não,Sim,não,Não,Não,Artrite Reumatica 

Sim,Sim,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Não,Normal,Sim,Moderado,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Moderado,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Não,Sim,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,não,Moderado,Importante,Não,Não,Sim,Não,não,Não,Sim,Não,Não,Não,Artrite Reumatica 

而執行所述代碼時出現的錯誤錯誤:

rctxt[cont] = aux[1]; 

有人知道如何解決這個問題嗎? (對不起,關於葡萄牙語的一些詞,我來自巴西)

+2

空行請張貼堆棧跟蹤的其餘部分,向我們展示了線導致異常。 –

+1

你應該考慮創建一個類來保存你的數據。那麼你將只需要這些對象的一個​​數組。 –

+0

我正在使用JFRAME,我將更新顯示錯誤行的帖子。 – Mutante

回答

2

看起來有些行沒有任何文字(空行)。

這些行上的分割不會產生長度爲18的字符串數組。

嘗試

if (arr.length < 18) 
    continue; 

而且如上所述,具有封裝此數據會使您編寫了很多更具可讀性的對象。

編輯

爲了澄清

你有這樣的代碼

while (linha != null) { 
     linha = lerArq.readLine(); 
     aux = linha.split(","); 

現在檢查aux數組的大小,如果沒有18那麼跳過此行

if (aux.length < 18) { 
     System.err.println (linha + " does not have enough values"); 
     continue; 
    } 
+0

好吧,我刪除了所有空行在我的文件中,現在在最後一行'diagnosticotxt [cont] = aux [17]'中出現相同的錯誤,我沒有使用你說的條件,因爲我不明白它。你能再解釋一次嗎? – Mutante

1

Th發生異常是因爲你用空行與 分開的行不檢查是否實際上有18個標記。 要麼你刪除這些空行,或者你添加一個條件,像這樣:

linha = lerArq.readLine(); 

aux = linha.split(","); 
if(aux.length != 18) 
    continue; 

而且你有一點點問題,您的一條線路(35)。該行剛剛17令牌,並且會導致下ArrayOutOfBoundsException如果不使用條件,但刪除您FILE.TXT

+0

Ehm對不起,我的壞。要解決這個問題。還在早上這裏 - '' –

+0

好的,我刪除了所有空行在我的文件中,現在在最後一行diagnosticotxt [cont] = aux [17]中出現了相同的錯誤,我沒有使用條件你說,因爲我不明白。你能再解釋一次嗎? – Mutante

+0

@Mutante該條件檢查您從split方法收到的令牌數組是否不具有長度18.如果是這種情況,continue會讓程序「跳」回到循環開始並遍歷下一行。你現在遇到的例外情況也在我的回答中描述。你文件中的一個文件只有17個令牌。因此試圖訪問第18個元素([17])會導致異常 –