回りくどいことしなくていいのね

練習問題でtxtからhtmlに出力するプログラムを組んでみた。あれこれ試して望む結果を得ることはできたんだけど、解答と比べてびっくり。
自分のプログラムがものっそい回りくどいというか、手間かけすぎてる感がものすごい。ヒマな方は見比べてニヤニヤするがいいさ!



こんなことするプログラム

○ルール

  1. 最初に一度だけ"<html><head><title>My Page</title></head></html><body>"を出力する。
  2. 標準入力が終わったら、最後に"</body></html>"を出力する。
  3. 入力行が"■"で始まっていたら、■を取り除いた残りの文字列を"<h1>"と"</h1>"ではさんで出力する。
  4. 入力行が"●"で始まっていたら、●を取り除いた残りの文字列を"<h2>"と"</h2>"ではさんで出力する。
  5. 入力行が"----"と等しかったら、"<hr>"を出力する。
  6. 入力行が"address"と等しかったら、"<a href="aaa">aaa@bbb.com">aaa@bbb.com</a>"を出力する。
  7. ルール3〜ルール6以外は、入力行をそのまま出力する。

以上を踏まえて。

自分で書いたプログラム

import java.io.*;

public class MakeHtml
{
  public static void main(String[] args)
  {
	BufferedReader reader = new BufferedReader
				(new InputStreamReader(System.in));

	System.out.println("<html><head><title>My Page" +
				</title></head></html><body>");
	try{
	String line = reader.readLine();
		while(line != null)
		{
			if(line.charAt(0) == '■')
			{
				System.out.print("<h1>");
				for(int i = 1; i < line.length(); i++)
				{
					System.out.print(line.charAt(i));
				}
				System.out.println("</h1>");
			}
			else if(line.charAt(0) == '●')
			{
				System.out.print("<h2>");
				for(int j = 1; j < line.length(); j++)
				{
					System.out.print(line.charAt(j));
				}
				System.out.println("</h2>");
			}
			else if(line.equals("----"))
			{
				System.out.println("<hr>");
			}
			else if(line.equals("address"))
			{
				System.out.println("<a href=\"mailto:aaa@bbb.com\">"
								+ "aaa@bbb.com</a>");
			}
			else
			{
			System.out.println(line);
			}
			line = reader.readLine();
		}
	}
	catch(IOException e)
	{
		System.out.println(e);
	}
	System.out.println("</body></html>");
  }
}

解答にあったプログラム

import java.io.*;

public class MakeHtml
{
  public static void main(String[] args)
  {
	BufferedReader reader = new BufferedReader
				(new InputStreamReader(System.in));

	System.out.println("<html><head><title>My Page" +
				</title></head></html><body>");
	String line;
	try{
		while((line = reader.readLine()) != null)
		{
			if(line.startsWith("■"))
			{
				System.out.println("<h1>" + line.substring(1) + "</h1>");
			}
			else if(line.startsWith("●"))
			{
				System.out.println("<h2>" + line.substring(1) + "</h2>");
			}
			else if(line.equals("----"))
			{
				System.out.println("<hr>");
			}
			else if(line.equals("address"))
			{
				System.out.println("<a href=\"mailto:aaa@bbb.com\">"
								+ "aaa@bbb.com</a>");
			}
			else
			{
				System.out.println(line);
			}
		}
		System.out.println("</body></html>");
		}
	catch(IOException e)
	{
		System.out.println(e);
	}
  }
}


今回気づかされたのは、条件式のところでreadLine()使用できるってことかな。
そこで変数に代入させれるのかよ!って。
こうして見比べると自分で書いたほうはなんだか回りくどく見えてくる…まあいい、次に生かそう。