2017-08-11 7 views
0

私はcsvファイルを読み込み、「開始」と「終了」に「timespan」を分割しようとしています。期間が1つの日付で構成されている場合、 'begin'と 'end'は同じです。CSVと分割属性を読み込み

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

結果:私はOpenCSVを使用して行毎にファイルをロードしています現時点では

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

。これはかなりうまくいくが、私は1つの属性を分割する方法を知らない。 propably私は配列にCSVを解析する必要がありますか?

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

最初のトークンは、そう、timespanを表します:

String timespan = tokens.nextToken() 

次にあなたが" - "に基づいてタイムスパンを分割することができますが、,で区切られたトークンを取得するためにStringTokenizerを使用することができますl任意の行については

+0

日付のサイズが定数の場合、「 - 」で分割することができますか? –

答えて

0

、そう:

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

最後に、あなたはstartEnd.length == 1場合、その後、あなたは絶対にそうstartEnd[0],startEnd[0]

がそうでなければ、結果は私がこれを願って、次のstartEnd[0],startEnd[1]

ようになり、それがbeginend一致を開始知っている、startEndの大きさを計算しなければなりません問題を解決するのに役立ちます。

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 
関連する問題