2011-03-06 67 views
0

我面臨着前幾天我遇到的問題。我必須解析這個文件並將字符串轉換爲日期。我幾天前對另一個CSV文件做了同樣的處理。但是,新文件出現此錯誤:java.text.ParseException:Unparseable date:「」3/4/2011「」無法使用jexcel api解析字符串到日期

爲什麼字符串打印時帶有兩個「」?我認爲這是問題的根源。我張貼下面的代碼。請注意,相同的代碼適用於日期打印爲3/4/2011且其周圍沒有「」的其他文件。

 WritableWorkbook wbwrite=null; 
    WritableSheet sheet=null; 
    Label lwrite=null; 
    BufferedReader br=null; 
    Number n=null; 

    String strFile="quotes.csv"; 
String strLine = ""; 
    String st[]; 
    String delimiter="[,]"; 

int lineNumber = 0, tokenNumber = 0; 
    int length=0; 
    int counter=0; 
    Calendar cal = Calendar.getInstance(); 

    DateTime datecell=null; 

    if(strFile.equals("quotes.csv")) 
    { 
     System.out.print("in loop if"); 

     try 
     { 
      File file=new File("quotes.xls"); 
      wbwrite=Workbook.createWorkbook(file); 
      System.out.print("file created"); 
      //path=file.getCanonicalPath(); 
      sheet = wbwrite.createSheet("Sheet 1", 0); 
      lwrite=null; 
      n=null; 
      Date dtest=null; 
      DateFormat df=null; 
      Date dadd=null; 

      df=new SimpleDateFormat("dd-mm-yy"); 

    //create BufferedReader to read csv file 
    br = new BufferedReader(new FileReader(strFile)); 
    strLine = ""; 
    //st[]=empty; 
      delimiter="[,]"; 
    lineNumber = 0; tokenNumber = 0; 
      length=0; 
    //read comma separated file line by line 
    while((strLine = br.readLine()) != null) 
    { 
     //System.out.print("strline="+strLine); 
     //break comma separated line using "," 
     st=strLine.split(delimiter); 
        length=0; 
     while(length<st.length) 
     { 
      //display csv values 
      // 
      System.out.println("Line # " + lineNumber + 
        ", Token # " + tokenNumber 
        + ", Token : "+ st[length]); 
          if(tokenNumber==2) 
          { 
           System.out.print("date="+st[length]); 
            DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
            Date date = (Date)formatter.parse(st[length]); 
            System.out.print("date="+date); 
            cal.setTime(date); 
            cal.set(Calendar.HOUR_OF_DAY, 17); 
            cal.set(Calendar.MINUTE, 30); 
            cal.set(Calendar.SECOND, 0); 
            cal.set(Calendar.MILLISECOND, 0); 
            date = cal.getTime(); 
            System.out.print("date="+date); 
            datecell=new DateTime(tokenNumber,lineNumber,date); 
            sheet.addCell(datecell); 
            lwrite=new Label(tokenNumber,lineNumber,st[length]); 
            sheet.addCell(lwrite); 
         } 
        if(tokenNumber==1||tokenNumber==5||tokenNumber==6||tokenNumber==7) 
        { 
          n=new Number(tokenNumber,lineNumber,Float.parseFloat(st[length])); 
          sheet.addCell(n); 
        } 
        tokenNumber++; 
        length++; 
    } 
    //reset token number 
      //tokenNumber = 0; 
} 
    wbwrite.write(); 
    wbwrite.close(); 
} 
catch(Exception e) 
{ 
     System.out.print("error="+e); 
} 
    } 
} 

回答

0

我解決了它。該字符串已經有前導和尾隨引號,導致解析時使用雙引號。這就是爲什麼「」3/4/2011「」。 我加

 if (st[length].startsWith("\"")) 
    { 
     st[length] = st[length].substring(1, st[length].length()); 
     } 
    if (st[length].endsWith("\"")) 
    { 
     st[length] = st[length].substring(0, st[length].length() - 1); 
    } 

加連日期格式是DD-MM-YYYY;已更改爲dd/MM/yyyy。現在我正在得到正確的答案。