2016-04-06 3 views
0

私は部門コードで分類する必要があり、部門ラインも複製するべきではありません。動的な値を持つ次のファイル情報を再フォーマットする方法は?

例:DEPART160〜N〜ABCD〜A01 ==>このA01には、最後に来る部門コードがあります。このA01の値は、ファイル内で動的になります。

入力ファイルを処理した後、次のように出力ファイルを送信する必要があります。

入力

COMPANY100~ABCD~SAJED~1~1~1 
COMPANY150~200605049829~ ~ ~1~ ~1 
DEPART160~N~ABCD~A01 
EMP180~N~3~BAKK 5401281~46~D~11 
DEPART160~N~ABCD~A02 
EMP180~N~3~BAKK 5401282~46~D~11 
DEPART160~N~ABCD~K06 
EMP180~N~4~BAKK 5401283~47~D~11 
DEPART160~N~ABCD~K07 
EMP180~N~4~BAKK 5401284~48~D~11 
DEPART160~N~ABCD~K06 
EMP180~N~4~BAKK 5401285~49~D~11 
DEPART160~N~ABCD~A02 
EMP180~N~3~B081 5401286~49~D~11 
DEPART160~N~ABCD~K07 
EMP180~N~3~B082 5401287~49~D~11 

予想される出力

COMPANY100~ABCD~SAJED~1~1~1 
COMPANY150~200605049829~ ~ ~1~ ~1 
DEPART160~N~ABCD~A01 
EMP180~N~3~BAKK 5401281~46~D~11 
DEPART160~N~ABCD~A02 
EMP180~N~3~BAKK 5401282~46~D~11 
EMP180~N~3~B081 5401286~49~D~11 
DEPART160~N~ABCD~K06 
EMP180~N~4~BAKK 5401283~47~D~11 
EMP180~N~4~BAKK 5401285~49~D~11 
DEPART160~N~ABCD~K07 
EMP180~N~4~BAKK 5401284~48~D~11 
EMP180~N~3~B082 5401287~49~D~11 

誰かがコードスニペットやロジックで私を助けてもらえますか?

ありがとうございました。

+0

文字列は値として一覧とハッシュテーブルのキーとしてDEPARTストア、それを開始した場合、キーはその値の一覧に次の行を追加します(存在する場合)、それ以外の新しいキーを作成し、次を追加し、ラインでの文字列のラインを読みますライン。 – lobo

答えて

0
List<String> companyValues = new ArrayList<>(); 
    TreeMap<String, List<String>> content = new TreeMap<>(); 
    StringTokenizer st = new StringTokenizer(string, delimiter); 
    String earlierLine = null; 
    while (st.hasMoreTokens()) { 
     String line = st.nextToken().trim(); 
     if(line.contains("COMPANY100") || line.contains("COMPANY150")) { 
      // addCompany 
      companyValues.add(line); 
     } else if(line.startsWith("DEPART160")) { 
      earlierLine = line; 
     } else { 
      if (!content.containsKey(earlierLine)) { 
       content.put(earlierLine, new ArrayList<String>()); 
      } 
      content.get(earlierLine).add(line); 
     } 
    } 

    StringBuffer sb = new StringBuffer(); 
    for(String companyValue: companyValues) { 
     sb.append(companyValue); 
     sb.append(delimiter); 
    } 
    for(Map.Entry<String, List<String>> entry : content.entrySet()) { 
     String key = entry.getKey(); 
     List<String> values = entry.getValue(); 
     sb.append(key); 
     sb.append(delimiter); 
     for(String value: values) { 
      sb.append(value); 
      sb.append(delimiter); 
     } 
    } 
    sb.toString() 
関連する問題