0

ソース ファイルからデータを取得し、一連の区切りレコードをターゲット ファイルに書き込む、会社用のファイル トランスレータを作成しています。レコードの形式は次のとおりです。

ヘッダー*REC 1*REC 2*REC 3*REC 4

レコードが空で、その後に別のレコードがある場合、値は出力されませんが、区切り文字は含まれます。

ヘッダー*REC 1**REC 3*REC 4

レコードが空で、シリーズの最後のレコードである場合、値と区切り文字は省略されます。次に例を示します。

ヘッダー*REC 1*REC 2*REC 3

(疑似コード) 以外のコードでこれを記述する良い方法を考えようとしていました。

if last record is empty
    print this
otherwise
    print this other thing

コードはそれほど醜くはないと思いますが、より良い解決策が欲しいです。StringBuilder を使用して各トランザクションのデータを書き込んでいます (レコードの各セットはトランザクションに対応するため、TransactionSet オブジェクトを反復処理できます)。可能であれば、大量の switch/if ステートメントを避けるようにしています。これを行うためのより優れた、またはエレガントな方法を誰かが知っている場合は、ぜひ聞いてください。

編集:疑似コードの明確化されたブロック

4

1 に答える 1

1

あなたはこのようにすることができます

System.out.print("HEADER");
StringBuilder sep = new StringBuilder();
for(String rec: headings) {
   sep.append("*");
   if(rec != null && !rec.isEmpty()) {
      System.out.print(sep + rec);
      sep.setLength(0);
   }
}
System.out.println();

この方法では、その後に見出しがある場合にのみ「*」が出力されます。

于 2013-01-07T21:17:24.113 に答える