テキストファイルの内容を加工します。"。"を見つけて、その後で改行をいれるというプログラムにします。
まず、エディタで適当なテキストファイルを作成しましょう。ファイル名は kaigyou0.txt。もちろん"。"が含まれていて、"。"の直後に改行されていないところがたくさんある物にします。
あいう。中身はなんでもいいので、"。"が入っていて、改行が 少ないテキストファイルをつくります。適当に改行があっても 問題ありません。まるのあとに次の文字が続いていないとたぶん行が 1行空くようになると思います。
import java.io.*; public class AddLF { public static void main( String[] args ) { try { FileReader in = new FileReader("kaigyou0.txt"); BufferedReader inb = new BufferedReader(in); FileWriter out = new FileWriter("kaigyou1.txt"); BufferedWriter outb = new BufferedWriter(out); ここを考える outb.close(); out.close(); inb.close(); in.close(); } catch (IOException e) { System.err.println( "ファイルがないのでは?" ); } } }
プログラムのタイプは前回の一番上の物にしましたが、どれでもかまいません。
今度は、1文字ずつ読んでいきますから、
String line; while ((line = inb.readLine()) != null) {
の代わりに、
int c; while (( c = in.read() ) != -1) {
を使いましょう。バイナリファイルから入力で使った時は1バイトずつ読むのに使いましたが、FileReaderやBufferedReaderで使う場合は、1文字ずつ読んで、その文字の文字コード(javaの用語でコードポイント)が c に代入されます。
もし、上記の「ここを考える」のところに
int c; while ((c = inb.read()) != -1) { outb.write( c ); }
と書けば、kaigyou0.txtの中の文字はそのままkaigyou1.txtに書き出されることになります。
"。"の文字コード(javaの用語でコードポイント)を調べることができれば、これと比べてもし"。"だったら改行を出力すればOKですね。
if ( c == 「。のコードポイント」) { 改行の出力「newLine()を使えばよかったね」 }
文字コード(javaの用語でコードポイント)を調べるのは「キーボードから1文字入力」で z の文字コードは 122 と調べていますが、同様なことをファイルからの入力でもできますよ。
もう一つの方法は、"。"からコードポイントに変換するcodePointAt()というメソッドを使って文字コードを調べる方法もあります。Character.codePointAt("。",0)とやって、求めます。これを c と比較することもできます。
ファイルから読んだ文字がこうだったとして
ました。その
一文字ずつ出力するが"。"だったらその直後に改行マークを出力する。
ました。LFその
上記の AddLF.java をつくり実行してみなさい
適当なテキストファイル kaigyou0.txt を作って、実行し、kaigyou1.txt ができていることを確認しなさい。
kaigyou1.txtをエディタで開いて内容を確認しなさい。
うまくいってなければ、AddLF.java にもどってもう一度考え直します。