正規表現によるマッチング

演習問題

問題1

コマンドライン引数にファイル名を与えると、 その拡張子を取り出すプログラムを作成しなさい。 拡張子とは、ファイル名が「cmd.exe」であれば「exe」である。 java.sun.exe のように「.」が2つ以上ある場合もあるので、 拡張子は、最後の「.」の直後から末尾までの文字列、 と定義することができる。

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

問題2

標準入力から HTML 文書または XML 文書を与え、 文書内で使用されている要素(タグ名)の一覧を作成し表示するプログラムを作成しなさい。 なお、使用されている属性は無視してよい。

要素名の一覧をあらかじめプログラムで持ち、 それを1つ1つチェックするというプログラムにはしないこと。

余力のある人は、 コメントの中にある場合 <!-- <html> --> や文字列の中にある場合 alt="<html>"、 にはどのように無視するか、 JavaScript のソースの中にある場合はどうするか、 考えてみること。

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

問題3

標準入力から日本語で書かれた文書を読み込み、 そこで使われている単語とその出現回数を表示するプログラムを作成しなさい。

日本語文から単語を切り出す方法は、 文字種の変わり目を用いる擬似的な方法でよいものとする。 以下を参考にすること。

import java.util.regex.*;
...
    String string;
    Pattern p = Pattern.compile(
        "(\\p{InBasicLatin}+|\\p{InHiragana}+|\\p{InKatakana}+|\\p{InCJKUnifiedIdeographs}+)");
    ...
    (stringに分割したい文字列を代入)
    ...
    Matcher m = p.matcher(string);
    while (m.find()) {
	System.out.println(m.group());
    }

なお、出現回数のカウントには HashMap を用いるとよい。 余力のある人は頻度順に並べて表示すること。

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

問題4

Web ページを取得する他の演習問題を参考に、 Web ページのHTML文書からリンクを抽出するプログラムを作成しなさい。

なお、リンクとして a 要素の href 属性だけでなく、 img 要素の src 属性からも抽出すること。 その他、各種メディアの存在場所やフレームのソースを抽出してもよい。

抽出したリンクは以下のように分類して表示をすること。

「http://」あるいは「https://」で始まるからといって、 他サイトのリンクとは限らないことに注意すること。 なお、分類するだけでよく、すべての URL を「http:// ~」の形式に書き直す必要はない。

また、上記とは別に、拡張子を判別してメディアごとに一覧を表示する機能もつけること。

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