クラスライブラリ基礎

演習問題

解答は

に提出しなさい。クラスファイル (〜.class) は提出不要。 提出は gFTP 等の ftp ソフトを用いて行うこと。

問題1

ブックマークを検索するプログラムを作成しなさい。 ブックマーク名を入力すると、そのURLが得られる。 ブックマークは以下の形式でファイルに保存されているとする。

ブックマーク名,URL
ブックマーク名,URL
...

例えば以下のような内容となる。

W3C,http://www.w3.org/
TDU,http://www.dendai.ac.jp/

プログラム起動時にファイルから情報を読み込み、 その情報を HashMap に格納して、 何度でも検索できるようにすること。

main メソッドのあるクラスのクラス名は BookmarkSearcher とする。

ファイルの読み込みについては、以下のプログラムを参考にすること。

import java.io.*;

// 使い方: java FieldReader filename

class FieldReader {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(args[0]));
            while(true) {
                String line = reader.readLine();
                if(line == null)
                    break;
                String[] field = line.split(",");        // "," で区切って配列にする
                for(int i = 0; i < field.length; i++)
                    System.out.print("\"" + field[i] + "\"");
                System.out.println();
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

" " でくくられた文字列の中に " を書きたい場合には \" と書くことに注意すること。

任意のブックマーク名で検索できるとよい。 キー入力をさせる場合には BufferedReader あるいは Scanner を使うとよい。

BufferedReader reader = new BufferedReader(
                           new InputStreamReader(System.in));
while(true) {
    System.out.print("検索: ");
    String line = null;
    try {
        line = reader.readLine();
    }
    catch(IOException e) {
        break;
    }
    if(line == null)
        break;

    System.out.print("ブックマーク名: ");
    System.out.println(line);

    // URLが登録されていれば表示
}

なお、ユーザが Ctrl-d (Windows の場合は Ctrl-z) を入力すると、 readLine() が null を返し、繰り返しが終了する。

問題2

欧文を入力すると、そこで使われている全単語の使用回数(出現頻度)を数え、 一覧表示するプログラムを作成しなさい。 HashMap<String, Integer> を使うこと。

欧文は、単語と単語の間が空白で区切られているものとする。 Scanner クラスのメソッド next() を使うと、 1単語ずつ読み込むことができる。

    System.out.println("欧文を入力してください(終了: Ctrl-d)");
    Scanner scanner = new Scanner(System.in);
  
    while(scanner.hasNext()) {
        String word = scanner.next();

        ....

    }

main メソッドのあるクラスのクラス名は WordCounter とする。

問題3

問題2のプログラムをベースに、 一覧が出現頻度順になるよう改良しなさい。

キーの集合からリストを生成し、それを Comparator で並び替えるとよい (違う方法でもよい)。

main メソッドのあるクラスのクラス名は WordCountAndSorter とする。