2015-05-27 53 views
-2

請讓我知道如何允許空數據?Java.util.Scanner閱讀器如何允許空指針異常

我的輸入數據:

4,Get,NULL,,0,2015/05/14 11:06:26,2015/05/14 11:06:28 

輸出錯誤:

java.lang.NumberFormatException: For input string: "2015/05/14 11:06:26" 

我的代碼:

public List<Row> getListFileData() { 

    File file = new File(file.txt); 

    FileReader fr = new FileReader(file); 

    Scanner in = new Scanner(fr); 

    while (in.hasNext()) { 
    try{ 
    String line = in.nextLine().replace("\"", ""); // here line like 4,Get,NULL,,0,2015/05/14 11:06:26,2015/05/14 11:06:28 

     Scanner lineBreaker = new Scanner(line); 

     lineBreaker.useDelimiter(", *"); 

     String job_id = lineBreaker.next().trim(); 

     String job_type = lineBreaker.next(); 

    String job_state = lineBreaker.next().trim(); 

    String job_process = lineBreaker.next().trim(); 

    String che_id = lineBreaker.next().trim(); 

    int job_step =Integer.valueOf(lineBreaker.next().trim()); //here error numberformat excception 

}catch(NullpointerException ex){ 
ex.printStackTrace(); 
} 



return list; 
    } 
} 
+0

該字符串'2015年5月14日11: 06:26'實際上看起來像一個日期,爲什麼你要將它轉換爲數字? – Babel

+0

你得到的錯誤是因爲「2015/05/14 11:06:26」是一個日期,你試圖將它解析爲一個int。這與您提出的允許空標記的問題無關。代碼中的那部分在您發生錯誤時已經正常工作。 – azurefrog

+0

感謝當然它的工作一段時間,由於導入不良格式我需要解決數字格式異常?請讓我知道如何解決它? – sameer

回答

1

你可以使用一個誤差值定點(如-1),或使用包裝Integer而不是原始類型int(其中c不代表null)。此外,我會敦促你考慮使用String.split(String)try-with-resourcesclose()你的Scanner(並通過File)。像

public List<Row> getListFileData(File file) { 
    List<Row> list = new ArrayList<>(); 
    try (Scanner in = new Scanner(file)) { 
     while (in.hasNextLine()) { 
      // here line like 
      // 4,Get,NULL,,0,2015/05/14 11:06:26,2015/05/14 11:06:28 
      String line = in.nextLine(); 
      String[] arr = line.split(","); 
      String job_id = arr[0].trim(); 
      String job_type = arr[1].trim(); 
      String job_state = arr[2].trim(); 
      String job_process = arr[3].trim(); 
      String che_id = arr[4].trim(); 
      // This would appear to be a Date and Time in your sample input... 
      Integer job_step = Integer.valueOf(arr[5].trim()); 
      Row r = new Row(); 
      // ... 
      list.add(r); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return list; 
} 

如果你確實需要解析的日期和時間上面我會用一個SimpleDateFormat東西...我想你想要像

DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
Date job_step = sdf.parse(arr[5].trim()); 
+0

感謝您回覆,如何避免空指針異常?由於不良的導入文件得到這樣的錯誤。 – sameer