2013-12-19 30 views
1

我想讀取一個日誌文件,並試圖打印所有日誌之間的某些日期,但我最終得到這個異常,當我試圖從日誌中檢索日期。 這是我的代碼,它實際上是打印一些日誌信息java.lang.StringIndexOutOfBoundsException:異常

public class Teat { 


public static void main(String[] args) throws Exception { 
    // TODO Auto-generated method stub 
    { 
     // TODO Auto-generated method stub 
     SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy"); 
     BufferedReader br = new BufferedReader(new FileReader(
       "C:\\log.log")); 
     String sCurrentLine; 
     try { 
      String startDate = "12 Dec 2013"; 
      String endDate = "12 Dec 2013"; 

      Date dateStart = formatter.parse(startDate); 
      Date dateEnd = formatter.parse(endDate); 
      Date logDate = null; 
      int sDay = dateStart.getDate(); 
      int sMonth = dateStart.getMonth(); 
      int sYear = dateStart.getYear(); 
      int eDay = dateEnd.getDate(); 
      int eMonth = dateEnd.getMonth(); 
      int eYear = dateEnd.getYear(); 
      String date; 
      int i=0; 
       ArrayList<String> Sub_string = new ArrayList<String>(); 
      do { 
       sCurrentLine = br.readLine(); 
       Sub_string.add(sCurrentLine.substring(0, 11)); 

       logDate = formatter.parse(Sub_string.get(i)); 
       int lDay = logDate.getDate(); 
       int lMonth = logDate.getMonth(); 
       int lYear = logDate.getYear(); 
       if (lYear >= sYear && lYear <= eYear) 
       { 
        if (lMonth >= sMonth && lMonth <= eMonth) 

        { 
         if (lDay >= sDay && lDay <= eDay) { 
          System.out.println(sCurrentLine); 
         } 
        } 
       } 
       else{System.out.println("pls ented valid dates");} 
       i++; 
      }while(sCurrentLine!=null); 
     } 

     catch (ParseException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

    } 
} 

} 

誤差

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index 
out of range: 11 
    at java.lang.String.substring(Unknown Source) 
    at Teat.main(Teat.java:41) 
+0

'Sub_string.add(sCurrentLine.substring(0,11));''sCurrentLine'這裏的值是多少? –

+0

我從日誌文件中讀取的行, – sathya

+0

yes是那行的值是多少? –

回答

2

更改whlie((sCurrentLine = br.readLine())!=null)而不是do while否則您將以NullPointerException結束。

並在處理之前檢查if(sCurrentLinet.isEmpty()&&sCurrentLinet.length()>=11)

2

肯定的是該行的價值? - Jigar喬希3分鐘前編輯
值是2013年12月12日 - user3117965 19秒前

12 Dec 2013爲11字符長String所以最後一個字符是在位置10(第一個字符是在0指數),訪問第11個元素會給你帶來束縛,因此例外

+0

字符串的大小是大約100+,但我仍然遇到同樣的問題 – sathya

+0

它可能對某些情況有好處,但是當它是你提到的值時,它會失敗,異常停止程序在這個未處理的情況下進展 –

1
Sub_string.add(sCurrentLine.substring(0, 11)); 

給出了問題。在調用函數之前添加一個支票

1

您是否檢查日誌中的所有行是否都是至少11個字符?如果您的案例中的任何行少於11個字符,您將得到StringOutOfBoundsException。 也請根據@Prabhakaran的建議更改您的代碼。

+0

這實際上是日誌文件格式的問題,無論如何感謝你們 – sathya

相關問題