2017-08-11 60 views
0

我試圖加載csv文件和分裂「時間跨度」到「開始」和「結束」。如果時間跨度由一個日期的「開始」和「結束」是相同的。負載CSV和分裂屬性

timespan,someOtherField, ... 
27.03.2017 - 31.03.2017,someOtherValue, ... 
31.03.2017,someOtherValue, ... 

結果

begin,end,someOtherField 
27.03.2017,31.03.2017,someOtherValue, ... 
31.03.2017,31.03.2017,someOtherValue, ... 

在我加載通過使用行的OpenCSV文件行的時刻。這工作相當不錯,但我不知道如何拆分一個屬性。顯然,我必須解析CSV到數組中?

+0

如果日期大小是常量,你可以依靠它們與「 - 」分開嗎? –

回答

0

對於任何線l可以使用StringTokenizer得到令牌的,分離:

StringTokenizer tokens = new StringTokenizer(l, ",") 

第一令牌代表timespan,所以:

String timespan = tokens.nextToken() 

然後你可以根據" - "拆分時間跨度,所以:

String[] startEnd = timespan.split(" - "); 

最後,你必須計算startEnd的大小,如果startEnd.length == 1,那麼你絕對知道,開始beginend一致,所以startEnd[0],startEnd[0]

否則結果將類似於以下startEnd[0],startEnd[1]

我希望這可以幫助你解決問題。

0

謝謝您的回答!我分析的CSV到一個額外的類,創造了每條記錄的對象。下面的代碼顯示了時間跨度的分裂。我現在將重建所有對象的新CSV文件。

// Load CSV as Booking objects 
    ArrayList<Booking> bookings = Utils.readCSV(csvClean); 

    for (int i = 0; i < bookings.size(); i++) { 
     String timespan = bookings.get(i).getTimespan(); 
     String begin = ""; 
     String end = ""; 

     if (timespan.contains(" - ")) { 

      // Split timespan and set values 
      String[] parts = timespan.split(" - "); 
      begin = parts[0].trim(); 
      end = parts[1].trim(); 

      bookings.get(i).setBegin(begin); 
      bookings.get(i).setEnd(end); 

     } else { 
      bookings.get(i).setBegin(timespan.trim()); 
      bookings.get(i).setEnd(timespan.trim()); 
     } // end if else 

    } // end for