2013-08-02 75 views
0

我有一個由我做的日誌,我希望我的程序可以按月在日誌中搜索。 這裏是我的file.txt的格式:無法正確分割txt文件,ArrayIndexOutOfBoundsException

[31 13年2月8日21時55分47秒] Name_Surname 0A49G 21

當第一個數字是一年的一週(我設法得到我可以按星期搜索,而且雖然它在本月會是一樣的,但看起來我錯了),接下來的3個數字是日/月/年。 問題是我無法拆分數組(因爲netBeans說「線程中的異常」AWT-EventQueue-0「java.lang.ArrayIndexOutOfBoundsException:1」)。我標記了netBeans所說的問題。我想要的是獲取月份的數量,以便我可以進行搜索。

下面是代碼:

textoMostrado.setText(""); 
    FileReader fr = null; 
    try { 
     File file = new File("Registro.txt"); 
     fr = new FileReader(file); 
     if (file.exists()) { 
      String line; 
      BufferedReader in = new BufferedReader(fr); 
      try { 
       int mes = Calendar.getInstance().get(Calendar.MONTH); 
       mes++; 
       int año = Calendar.getInstance().get(Calendar.YEAR); 
       año %= 100; 
       while ((line = in.readLine()) != null) { 
        String[] lista = line.split(" "); 
        String [] aux = lista[1].split("/"); //the problem is here 
        int numMes = Integer.parseInt(aux[1]); 
        int numAño = Integer.parseInt(aux[2]); 
        if ((numMes==mes)&&(numAño==año)) { 
         textoMostrado.append(line+"\n"); 
        } 
       } 
      } catch (IOException ex) { 
       Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      fr.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(MostrarRegistros.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

對不起,我的英語不是我的母語,我希望有人能幫助我與此有關。

+1

你用調試器停下來看看那行的lista的內容嗎?您可能正在閱讀與該模式不匹配的某行(可能是評論或空白行)。 – chrylis

回答

5

這對線:

String[] lista = line.split(" "); 
String [] aux = lista[1].split("/"); //the problem is here 

...將失敗的任何時間行不包含空格,因爲在這種情況下lista只會有一個元素。您可以防範的是:

if (lista.length > 1) { 
    String[] aux = lista[1].split("/"); 
    ... 
} else { 
    // Whatever you want to do with a line which doesn't include a space. 
} 

我的猜測是,你的日誌裏面的線,如您的樣品中 - 你可以很容易地診斷,僅僅通過把一些記錄上面的else子句。你可能會發現它是一個空字符串,順便說一句...

+0

+1「你可能會發現它是一個空字符串」 – Jashaszun

+0

非常感謝,解決了我的問題。我雖然lista會像lista [0] = [31; LISTA [1] = 02/08/13,等等這就是爲什麼我想分開使用auxiliar。我不確定爲什麼lista只有一個元素,正如你所說,這是因爲我有一條空行,我沒有看到? – user2647435

+0

@ user2647435:是的,'lista' *會*就像那樣 - 但只適用於有空格的行。是的,一條空行會解釋它 - 但我們無法確定您的文件是否真的有一個。 –