SSブログ

Java:while文でファイル入出力 [勉強]

職業訓練の夏休み中、しっかりJavaの復習をやっている私ってば、お利口さんだってばYO。
(褒められて伸びる子です。伸びるのは才能であって、アゴではありません)

では、教科書7章「while文」の練習問題7-3にチャレンジです。
「標準入力から1行ずつ読み取って、以下のルールにしたがい処理を行い、標準出力に出すプログラムMakeHtmlを書け」
ルール1.最初に一度だけ"<html><head><title>My Page</title></head><body>"を出力。
ルール2.標準入力が終わったら、最後に"</body></html>"を出力。
ルール3.入力行が"■"で始まっていたら、■を取り除いた残りの文字列を"<h1>"と"</h1>"ではさんで出力。
ルール4.入力行が"●"で始まっていたら、●を取り除いた残りの文字列を"<h2>"と"</h2>"ではさんで出力。
ルール5.入力行が"----"と等しかったら、"<hr>"を出力。
ルール6.入力行が"address"と等しかったら、"<a href="mailto:agoago@example.com">agoago@exeample.com</a>"を出力。
ルール7.ルール3~6以外は、入力行をそのまま出力。

で、入力用テキストとして準備されているのは、以下のhello.txtです。
■私のホームページへようこそ
----
●こんにちは
こんにちは! 私のホームページへようこそ。
----
●自己紹介
私は しゃくれアゴといいます。どうぞよろしく。
----
●メール待っています。
あなたからのメールをお待ちしています。
メールアドレスは、
address
です。

で、上記テキストファイルをHTMLファイルに変換する際は、以下のようにjavaを実行します。

java MakeHtml < hello.txt > hello.html

 

さてさて・・・面倒な練習問題ですねぇ。
でも、ひとつひとつのルールを処理に置き換えていけば、ソースに書けなくもない・・・・・・かな??

 

 

以下、練習問題7-3の回答ソースです。(教科書の最後の方に載っていた回答じゃなくて、私なりに考えて書いたソースですよ)

import java.io.*;

public class MakeHtml {
 public static void main(String[] args) {
  BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));
  try {
   String line;
   String rule3 = "";
   String rule4 = "";
   while ((line = kbd.readLine()) != null) {
    //ルール1
    System.out.println("<html><head><title>My Page</title></head><body>");
    //ルール3
    if (line.charAt(0) == '■') {
     //substring(int)により■以降の文字列を代入
     rule3 = line.substring(1);
     System.out.println("<h1>" + rule3 + "</h1>");
    } else if (line.charAt(0) == '●') {
     //ルール4
     //substring(int)により●以降の文字列を代入
     rule4 = line.substring(1);
     System.out.print("<h2>" + rule4 + "</h2>");
    } else if (line.equals("----")) {
     //ルール5
     //----を<hr>に置換
     String hr = line.replace("----", "<hr>");
     System.out.println(hr);
    } else if (line.equals("address")) {
     //ルール6
     //addressをmeiltoタグに置換
     String adrs = line.replace("address", "<a href=\"mailto:agoago@example.com\">agoago@example.com</a>");
     System.out.println(adrs);
    } else {
     //ルール3~6以外は、そのまま出力
     System.out.println(line);
    }
   }
   //ルール2
   System.out.println("</body></html>");
  } catch (IOException e) {
   System.out.println(e);
  }
 }
}

ちょっとコメントがウザいですか?
書いている自分に対するコメントだったりもしたんですけどね。(^-^;
while文の章だから、標準入力があるかぎりwhileでループさせて、while内ではif文やelse if文でそれぞれのルール(条件)の処理をさせています。
これがいまの しゃくれアゴの中から絞り出てきた結果です・・・。

で、このソースをjavacでコンパイルした後、java MakeHtml < hello.txt > hello.htmlと実行すると・・・・・以下のようなHTMLファイルが出力されました。

<html><head><title>My Page</title></head><body>
<h1>私のホームページへようこそ</h1>
<html><head><title>My Page</title></head><body>
<hr>
<html><head><title>My Page</title></head><body>
<h2>こんにちは</h2><html><head><title>My Page</title></head><body>
こんにちは! 私のホームページへようこそ。
<html><head><title>My Page</title></head><body>
<hr>
<html><head><title>My Page</title></head><body>
<h2>自己紹介</h2><html><head><title>My Page</title></head><body>
私は しゃくれアゴといいます。どうぞよろしく。
<html><head><title>My Page</title></head><body>
<hr>
<html><head><title>My Page</title></head><body>
<h2>メール待っています。</h2><html><head><title>My Page</title></head><body>
あなたからのメールをお待ちしています。
<html><head><title>My Page</title></head><body>
メールアドレスは、
<html><head><title>My Page</title></head><body>
<a href="mailto:agoago@example.com">agoago@example.com</a>
<html><head><title>My Page</title></head><body>
です。
</body></html>

・・・なんかおかしなHTMLタグがありますな。
出力されたHTMLファイルをダブルクリックしてIEとかブラウザで見た限りだと問題なさそうだったんですけど、こうやってHTMLタグだけで見ると、正しく処理がされていないことが分かりますねぇ。
たぶん、最初のルール1処理がwhile文の最初に実行されるから・・・各行に最初の行にしか出力しないHTMLタグが出力されちゃっているんですね。(^-^;

う~ん・・・まだまだ直す場所があるってコトですねぇ。
どうやろう・・・・・・
12行目のルール1処理がwhile文の中に入っているから問題なんだから、12行目だけwhile文の外に出しちゃえばイイんですよね。

  System.out.println("<html><head><title>My Page</title></head><body>");
   while ((line = kbd.readLine()) != null) {
と、while分とルール1の処理の行を入れ替えれば・・・大丈夫!

あー、よかった。よかった。

ルール1の処理をwhile文の上(外)に出してコンパイルし直して実行(java MakeHtml < hello.txt > Hello.html)した結果、出力されたHello.htmlの内容は以下の通りです。

<html><head><title>My Page</title></head><body>
<h1>私のホームページへようこそ</h1>
<hr>
<h2>こんにちは</h2>こんにちは! 私のホームページへようこそ。
<hr>
<h2>自己紹介</h2>私は しゃくれアゴといいます。どうぞよろしく。
<hr>
<h2>メール待っています。</h2>あなたからのメールをお待ちしています。
メールアドレスは、
<a href="mailto:ago@example.com">ago@example.com</a>
です。
</body></html>

ふぅ・・・。
無事、問題を解決。
よかった、よかった。これで7章の練習問題終了っ!

これで8章「メソッド」の練習問題にチャレンジできますよ。

 

 

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:資格・学び

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。