目次> 第14章> 14.10 TOPUPPREVNEXT

14.10 演習

【課題】

テキストファイルからデータを読み込み、 逆順にテキストファイルとして出力するようなプログラムを作成する。

【課題の解釈と大まかな手順】

文字単位に逆順にするケースと、 行単位に逆順にするケースを考えます。

データを並べ替える作業は、全データを溜め込まなければいけません。 単一の変数では処理ができず、配列やコレクションが必要になります。

文字単位に逆順にする場合、

  1. 文字単位に読み込み、
  2. 文字配列に格納する。
  3. 配列のデータの最後から、
  4. 逆順に、文字単位に出力する。

行単位に逆順にする場合、

  1. 行単位に読み込み、
  2. 文字列の配列に格納する。
  3. 配列のデータの最後から、
  4. 逆順に、行単位に出力する。

【回答例1】

文字単位に逆順にしてみましょう。 入力時に改行があっても無視し、 出力に際しては、5文字ごとに改行することにします。

プログラム ReverseDemo1.java

データ rev1.txt

実行結果

../java/io/ReverseDemo1-1.gif

【回答例2】

回答例1 の PrintWriter のかわりに BufferedWriter を使用しました。

プログラム ReverseDemo2.java

データ rev2.txt

実行結果

ReverseDemo2-1.gif  ReverseDemo2-2.gif

【回答例3】

行単位に逆順にしてみましょう。 プログラム ReverseDemo3.java

データ tenlittleindians.txt

実行結果

ReverseDemo3-1.gif  ReverseDemo3-2.gif

【回答例4】

回答例4の配列のかわりに、ArrayList を使用してみます。

プログラム ReverseDemo4.java

実行結果は同じです。

J2SE 5.0 のコレクション(13行目)と、for/each 構文(39〜40行目)を用いた場合
プログラム ReverseDemo4T.java

【回答例5】

回答例4の ArrayList を拡張したクラス ArrayReadWrite を考えましょう。

read 、 write 、reverse の3つのメソッドをもつクラスです。 このように、データの側にメソッドを用意することによって、 main 側では、データが配列なのか、ArrayList なのか、 あるいはそれ以外のデータ構造なのかといったことを気にせずに、 読め、書け、ひっくり返せということができるようになります。

プログラム ReverseDemo5.java

実行結果は回答例3と同じです。


更新日:2006-03-10 TOPUPPREVNEXT