ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの読み込んだファイルをHTML形式に変換するプログラム

  • mixiチェック
  • このエントリーをはてなブックマークに追加
以下の6つのファイルを修正する課題です。
http://briefcase.yahoo.co.jp/bc/yuzul_27/lst?&.dir=/58b4&.src=bc&.view=l
(↑初めての利用なので見れない場合指摘お願いします)

次の条件を満たすプログラムに修正する。
・コマンドライン引数で指定されたファイル名を全て処理の対象
・指定されたファイル名が存在しないファイル名であった場合は、エラーメッセージを表示して、処理を続行
・コマンドライン引数が一つも指定されなかった場合は、標準入力を読み込んで処理を行なう
・空行をブロックの区切りとして、ブロックの種類に応じて、HTML形式に変換した結果を標準出力に出力

・ブロックは先頭の文字で種類を判別します。
->ハイフンで始まるブロックは、箇条書きとして処理します。
->スペースで始まるブロックは、整形済みとして処理します。
->上記以外のブロックは、段落として処理します。

・箇条書き、整形済み、段落の違いは次の通りです。
ブロックの種類:説明
箇条書き:箇条書きにする。ブロック全体を<ul>と</ul>で囲い、ハイフンとそれに続く1つ以上のスペースを<li>に置き換えて出力。
整形済み:ブロック全体を<pre>と</pre>で囲う。ブロックの中の文字列を行ごとに改行付きで全て出力。
段落:ブロック全体を<p>と</p>で囲います。ブロックの中の文字列を行ごとに改行なしで全て出力します。

思いっきり丸投げです。よろしくお願いします。

コメント(5)

はい。
元ソースをなるべくいじらないように修正しました。
変更箇所はコメント入れてます。
たぶん動くと思うけど動かなかったらすいません・・・・・。


■ Block.java
import java.io.PrintStream;
import java.util.List;

public abstract class Block { // ← abstractに

public static Block createBlock(List<String> l) {

if (l != null && l.size() > 0) {

if (l.get(0).length() == 0) {

return new Paragraph(l);

} else {

Block b = null;

// switch () { ← コレ何??

if (l.get(0).charAt(0) == '-') {

b = new Itemization(l);

} else if (l.get(0).charAt(0) == ' ') {

b = new Preformat(l);

} else {

b = new Paragraph(l);
}

return b;
}
}

return null;
}


public abstract void print(PrintStream p); // ← 追加
}

■ Item.java



import java.io.PrintStream;

public class Item {

String l = ""; // ← ""で初期化

public Item(String l) {

int i = 0;

while (l.charAt(i) == '-') { // ← charAt(i) ⇒ l.charAt(i)

i ++;
}

while (l.charAt(i) == ' ') { // ← charAt(i) ⇒ l.charAt(i)

i ++;
}

while (i < l.length()) {

this.l = this.l + l.charAt(i); // ← charAt(i) ⇒ l.charAt(i)

i ++;
}
}

public void print(PrintStream p) {

if (l != null) {

p.print("<li>");
p.println(l);
}
}
}

■ Itemization.java



import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;

public class Itemization extends Block {

private List<Item> i;

public Itemization(List<String> l) {

if (l != null && l.size() > 0) {

for (String line : l) {

if (i == null) {

i = new ArrayList<Item>();

// } else {
//
// i.add(new Item(line)); ← 下へ
}

i.add(new Item(line)); // ← 上から移動
}
}
}

public void print(PrintStream p) {

if (i != null && i.size() > 0) {

p.println("<ul>");

for (Item ii : i) {

ii.print(p);
}

p.println("</ul>");
}
}
}
その2

■ Lesson14



import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Lesson14 {

public static void main(String[] args) {

BufferedReader r = null;
List<String> ll = null;
String l = null;

if (args.length == 0) {

r = new BufferedReader(new InputStreamReader(System.in));

try {

while (true) {

l = r.readLine();

if (l == null) {

break;

} else {

if (l.length() == 0) {

if (ll != null) {

Block.createBlock(ll).print(System.out);

ll = null;
}

} else {

if (! l.startsWith("#")) {


if (ll == null) {

ll = new ArrayList<String>();

// } else {
//
// ll.add(l); ← 下に移動
}

ll.add(l); // ← 上から移動
}
}
}
}

} catch (IOException e) {

e.printStackTrace();
}

} else {

for (int c = 0; c < args.length; c ++) {

try {

r = new BufferedReader(new InputStreamReader(new FileInputStream(new File(args[c]))));

} catch (FileNotFoundException e) {

e.printStackTrace();
continue;
}

try {

while (true) {

l = r.readLine();

if (l == null) {

break;

} else {

if (l.length() == 0) {

if (ll != null) {

Block.createBlock(ll).print(System.out);

ll = null;
}

} else {

if (! l.startsWith("#")) {


if (ll == null) {

ll = new ArrayList<String>();

// } else {
//
// ll.add(l); ← 下に移動
}

ll.add(l); // ← 上から移動
}
}
}
}

} catch (IOException e) {

e.printStackTrace();

try {

r.close();

} catch (IOException ee) {

ee.printStackTrace();
}

continue;
}

try {

r.close();

} catch (IOException e) {

e.printStackTrace();
}
}
}
}
}

■ Paragraph.java


import java.io.PrintStream;
import java.util.List;

public class Paragraph extends Block {

private List<String> l;

public Paragraph(List<String> l) {

this.l = l;
}

public void print(PrintStream p) {

if (l != null && l.size() > 0) {

p.println("<p>");

for (String line : l) {

// p.print(line); ← 下の処理に変更
p.println(line); // ← 改行が失われるので
}

// p.println(); ← 上記処理のため不要に・・・・
p.println("</p>");
}
}
}

■ Preformat.java



import java.io.PrintStream;
import java.util.List;

public class Preformat extends Block {

private List<String> l;

public Preformat(List<String> l) {

this.l = l;
}

public void print(PrintStream p) {

if (l != null && l.size() > 0) {

p.println("<pre>");

boolean isFirst = true; // 初回フラグ
for (String ll : l) {
if(isFirst) {
p.println(ll.substring(1)); // 初回は半角スペースを消す必要があるため
isFirst = false; // 初回フラグを落とす
} else {
p.println(ll);
}
}

p.println("</pre>");
}
}
}

ありがとうございます!
今は確認できる環境が無いため、帰宅してからやってみます。
ただいま正常に動くことを確認しました。
これから、処理一つ一つを理解できるよう努めてきます!

本当にありがとうございましたm(__)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。