Top > サンプル集

サンプル集

目的別のサンプルプログラム

String型をInt型に変換する

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
class Sample001 {
    public static void main(String[] args) {
 
    String str1 = new String("2");
    String str2 = new String("6");
 
 
    //String型の str1 と str2 をint型に変換
    int num1 = Integer.parseInt(str1);
    int num2 = Integer.parseInt(str2);
 
    //String型の結合
    System.out.println("str1 + str2 = " + (str1 + str2));
    
    //Int型の足し算
    System.out.println("int num1 + int num2 == " + (num1+ num2));
    }
}

実行結果

str1 + str2 = 26
int num1 + int num2 == 8

2つの整数を比較して大きい値を返す

  1
  2
  3
  4
  5
  6
  7
-
-
|
|
|
!
!
class Sample002 {
    public static void main(String[] args) {
    
        int max = Math.max(5, 2);
        System.out.println("大きい数字は " + max + "です");
    }
}

実行結果

大きい数字は 5です

文字列のn番目を書き換える

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
class Sample003 {
    public static void main(String[] args) {
        String str1 = "abcdefg";
        char ch = 'X';
        
        StringBuffer sb1 = new StringBuffer(str1);
        
        //str1の4番目の文字を変数chに書き換える
        sb1.setCharAt(3, ch);
        
        System.out.println("■書き換え前");
        System.out.println(str1);
        System.out.println();
        
        System.out.println("■書き換え後");
        System.out.println(sb1);
    }
}

実行結果

■書き換え前
abcdefg 

■書き換え後
abcXefg

文字列を連結する

  • 文字列を変更する場合はStringBufferクラスを使ったほうが高速で安全
  • J2SE5.0からStringBuilderクラス(ストリングビルダー)が追加された※実行速度が速い
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
-
-
|
|
|
|
|
|
|
|
|
|
|
|
!
!
 
import java.io.*;
 
class Sample004 {
    public static void main(String[] args) throws IOException {
        
        System.out.println("(出身地)都道府県を入力してください。");
        BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
        String str1 = br1.readLine();
        
        System.out.println("(出身地)市町村を入力してください。");
        String str2 = br1.readLine();
        
        StringBuffer sb1 = new StringBuffer(str1);
        sb1.append(str2);
        
        System.out.println("あなたの出身地は、" + str1 + str2 + "です。");       
    }
}

実行結果

(出身地)都道府県を入力してください。
長野県
(出身地)市町村を入力してください。
和田村
あなたの出身地は、長野県和田村です。

文字列を連結する(StringBuilderを使う)

StringBufferクラスのすべてのメソッドは同期化されているため、同期化を使用しない場合はStringBuilderクラスを使用したほうがレスポンスがよい。 ・・・らしい。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
-
|
-
|
|
|
|
|
!
!
class Sample005 {
 
    public static void main(String[] args) { 
        StringBuilder sb = new StringBuilder("クリーム");
    
        //()に追加したい文字列を入力
        sb.append("パンダ");
        System.out.println(sb); 
    }
}

実行結果

クリームパンダ

文字列をさかさまに入れ替える

  1
  2
  3
  4
  5
  6
  7
  8
-
-
|
|
|
|
!
!
class Sample006 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("イカ食べたかい");
       
        sb.reverse();
        System.out.println(sb);
    }
}

実行結果

いかたべ食カイ

キャストの基本

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
-
-
|
|
|
|
|
|
|
|
|
|
!
!
public class Sample007 {
    public static void main(String[] args) {
 
    char ch = 'あ';
    // char型をint型に変換
    int num = (int) ch;
    System.out.println(num);
 
    // int型をchar型に変換
    int num2 = 12354;
    char ch2 = (char) num2;
    System.out.println(ch2);
    }
}

実行結果

12354
あ

残りのメモリを表示する(ガベージコレクションの稼動確認)

ガベージコレクションとは、どこからも参照されなくなったインスタンス領域をJVMが回収し再利用することである。この処理は自動で行われるため、基本的にはメモリ残量を意識しなくてもよいが、ガベージコレクタが動き出すとJavaで書かれたすべてのプログラムが待機状態となってしまう。そのため、処理をとめたくないタイミングがある場合は直前でガベージコレクションを意図的に発生させたほうがよい。

以下の例はガベージコレクションが機能していることを確認するためのプログラムである。インスタンスを作りっぱなしにしておいて、ある一定のメモリ残数になるとガベージコレクションが働いてメモリを再利用していることがメモリ残数からよみとれる。

  1
  2
  3
  4
  5
  6
  7
  8
-
-
-
|
|
!
!
!
public class Sample008 {
    public static void main(String[] args) {
        while (true) {
            String s = new String("ガベージコレクションのテスト");
            System.out.println("残りメモリ = " + Runtime.getRuntime().freeMemory());
        }
    }
}

実行結果

残りメモリ = 4259840
残りメモリ = 4259840
残りメモリ = 4259840
残りメモリ = 4259840
残りメモリ = 4259840
残りメモリ = 4259840
残りメモリ = 5019416
残りメモリ = 5019416
残りメモリ = 5019416
残りメモリ = 5019416

例外をハンドリング

定義した配列よりも大きな添字に無理やり値をセットして例外エラーを発生させる。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
-
-
|
|
-
|
|
|
-
|
|
!
|
|
!
!
public class Sample009 {
    public static void main(String[] args) {
        int[] myarray = new int[5];
        
        try {
            System.out.println("代入します");
            myarray[50] = 10;
            System.out.println("代入が完了しました");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("代入時に例外が発生しました");
            System.out.println("例外は " + e );
        }
        System.out.println("処理終了");
        
    }
}

実行結果

代入します
代入時に例外が発生しました
例外は java.lang.ArrayIndexOutOfBoundsException: 50
処理終了

Threadクラスを拡張してスレッドを動かす

Threadクラスを拡張してスレッドを動かす場合は、他のスーパークラスを指定することができなくなってしまう。別のスーパークラスを継承する必要がある場合は、Runnableインターフェースを実装することでスレッドを動かすことができる。

2つのスレッドが同じフィールドに値を代入する場合は処理のタイミングによっては矛盾が生じてしまう。それを回避するにはメソッドの宣言で[syncronized]キーワードをつける必要がる。(←そのうちサンプルを作成してみる)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
-
-
|
|
|
-
|
!
!
|
-
-
|
!
!
!
public class Sample010 extends Thread {
    public static void main(String[] args) {
        Sample010 s010 = new Sample010();
        s010.start();
        
        for (int i=0; i<10; i++) {
            System.out.println("main i = " + i);
        }
    }
    
    public void run() {
        for (int i=0; i<10; i++) {
            System.out.println("run i = " + i);
        }
    }
}

実行結果

表示の順はマシンによって違ってくるらしい

run i = 0
run i = 1
run i = 2
run i = 3
run i = 4
run i = 5
run i = 6
run i = 7
run i = 8
run i = 9
main i = 0
main i = 1
main i = 2
main i = 3
main i = 4
main i = 5
main i = 6
main i = 7
main i = 8
main i = 9

Runnableインターフェースを実装してスレッドを作成する

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
-
-
|
|
|
|
-
|
!
!
|
-
-
|
!
!
!
public class Sample011 implements Runnable {
    public static void main(String[] args) {
        Sample011 s011 = new Sample011();
        Thread th = new Thread(s011);
        th.start();
    
        for (int i=0; i<10; i++) {
            System.out.println("main i = " + i);
        }
    }
    
    public void run() {
        for (int i=0; i<10; i++) {
            System.out.println("run i = " + i);
        }
    }
}

実行結果

main i = 0
main i = 1
main i = 2
main i = 3
main i = 4
run i = 0
run i = 1
run i = 2
run i = 3
run i = 4
run i = 5
run i = 6
main i = 5
main i = 6
main i = 7
main i = 8
main i = 9
run i = 7
run i = 8
run i = 9

ファイル読込み

指定されたファイルを読み込んで標準出力に表示する

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 
-
-
|
-
|
|
!
|
|
|
|
-
|
|
-
|
!
|
-
|
-
|
!
!
!
import java.io.*;
 
public class ShowFile {
    public static void main(String[] args) {
        /** 引数チェック */
        if (args.length != 1) {
            System.out.println("使用法:Java ShowFile ファイル名");
            System.exit(0);
        }
        
        /** ファイル名セット */
        String filename = args[0];
        
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (FileNotFoundException e) {
            System.out.println(filename + "が見つかりません");
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

実行方法

java ShowFile ファイル名

ファイル書き込み

標準入力から入力された文字列を実行時に指定されたファイルに出力する。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 
-
-
|
-
|
|
!
|
|
|
|
-
|
|
|
|
|
-
|
!
|
|
-
|
!
!
!
import java.io.*;
 
public class WriteFile {
    public static void main(String[] args) {
        /** 引数チェック */
        if (args.length != 1) {
            System.out.println("使用法:Java WriteFile ファイル名");
            System.exit(0);
        }
        
        /** ファイル名セット */
        String filename = args[0];
        
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            
            PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
            
            String line;
            while ((line = reader.readLine()) != null) {
                writer.println(line);
            }
            reader.close();
            writer.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}
  • ファイルは上書きされる

ファイルの削除

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 
-
-
-
|
|
!
|
|
|
-
|
-
|
!
!
!
import java.io.*;
 
public class DeleteFile {
    public static void main(String[] args) throws IOException {
        if (args.length != 1) {
            System.out.println("使用法:java DeleteFile ファイル名");
            System.exit(0);
        }
        
        String filename = args[0];
        File file = new File(filename);
        if (file.delete()) {
            System.out.println(filename + "を削除しました。");
        } else {
            System.out.println(filename + "は削除できませんでした。");
        }
    }
}

ファイル名称の変更

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 
-
-
-
|
|
!
|
|
|
|
|
|
|
-
|
-
|
!
!
!
import java.io.*;
 
public class ChangeFileName {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("使用法:java changeFileName 変更前ファイル名 変更後ファイル名");
            System.exit(0);
        }
        
        String oldfile = args[0];
        String newfile = args[1];
        
        File oldname = new File(oldfile);
        File newname = new File(newfile);
        
        if (oldname.renameTo(newname)) {
            System.out.println(oldfile + "を" + newfile + "に変更しました。");
        } else {
            System.out.println("ファイル名の変更に失敗しました。");
        }
    }
}

このプログラムの実行時エラーは以下のパターンが考えられる。

  1. 変更元のファイルがない場合
  2. 変更後のファイルがすでに存在している場合

予めファイルの存在チェックをしたほうが、よりスマートなロジックとなる。

ファイルの存在チェック(ファイル名称の変更)

existsメソッドを利用して、あらかじめ変更元のファイルが存在しているか?変更先のファイルが存在しているかチェックを行う。変更元のファイルが存在するもしくは変更後のファイルがすでに存在する場合はエラーとする。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 
-
-
-
|
|
!
|
|
|
|
|
|
|
|
-
|
|
-
|
|
!
|
|
-
|
-
|
!
!
!
import java.io.*;
 
public class ChangeFileName2 {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("使用法:java changeFileName 変更前ファイル名 変更後ファイル名");
            System.exit(0);
        }
        
        String oldfile = args[0];
        String newfile = args[1];
        
        File oldname = new File(oldfile);
        File newname = new File(newfile);
        
        /** ファイルの存在チェック */
        if (!oldname.exists()) {
            System.out.println(oldfile + "が存在しません。");
            System.exit(0);
        } else if (newname.exists()) {
            System.out.println(newfile + "がすでに存在します。");
            System.exit(0);
        }
        
        /** ファイル名の変更 */
        if (oldname.renameTo(newname)) {
            System.out.println(oldfile + "を" + newfile + "に変更しました。");
        } else {
            System.out.println("ファイル名の変更に失敗しました。");
        }
    }
}

DOSプロンプトから入力された文字を判別する

ファイルを削除する場合など、いきなり削除せずに確認メッセージを出力して入力された文字列を識別した上で後続の処理を行う。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
-
|
|
|
|
|
|
-
|
-
|
!
|
!
public static void main(String[] args) throws IOException {
        String input = "";
        
       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       System.out.println("本当によろしいですか? Y:Yes N:No");        
       input = reader.readLine();
       
       if (input.charAt(0) == 'y' || input.charAt(0) == 'Y') {
           System.out.println("TRUE");
       } else {
           System.out.println("FALSE");
       }
       
   }

メッセージ出力後、'y'もしくは'Y'が入力された場合にTRUEを、それ以外の入力の場合はFALSEを返す。

ディレクトリ一覧の取得と表示

指定されたディレクトリの一覧を取得して表示する。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 
-
-
|
|
-
|
|
!
|
|
|
|
|
|
|
|
|
-
|
!
!
!
import java.io.*;
 
public class GetDir {
    public static void main(String[] args) {
        
        /** 引数チェック */
        if (args.length != 1) {
            System.out.println("使用方法:java GetDir ディレクトリ名");
            System.exit(0);
        }
        
        /** ディレクトリ取得 */
        String dirname = args[0];
        /** Fileインスタンス作成 */
        File dir = new File(dirname);
        /* ディレクトリの一覧取得 */
        String[] dirlist = dir.list();
        
        /* ディレクトリ一覧の表示 */
        for (int i=0; i<dirlist.length; i++) {
            System.out.println(dirlist[i]);
        }
    }
}

実行結果

C:\java\sample>java GetDir c:\
Apache2.2
AUTOEXEC.BAT
boot.ini
bootfont.bin
CONFIG.SYS
Documents and Settings
eclipse
hiberfil.sys
IO.SYS
IPH.PH
java
JUST
MSDOS.SYS
NTDETECT.COM
ntldr
pagefile.sys
php
Program Files
Readme
RECYCLER
System Volume Information
Tomcat
WINDOWS
work

ディレクトリの作成と絶対パスの取得

  • java.io.File.mkdirs
  • java.io.File.mkdir

    はディレクトリを作成するメソッド。java.io.File.mkdirsは親ディレクトリも存在しない場合は同時に作成してくれる。
  • java.io.File.AbsolutePath

    は指定したファイルの絶対パスを取得する。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 
-
-
|
|
-
|
|
!
|
|
|
|
|
|
|
-
|
|
-
|
!
|
!
!
import java.io.*;
 
public class MakeDir {
    public static void main(String[] args) {
        
        /** 引数チェック */
        if (args.length != 1) {
            System.out.println("使用方法:java MakeDir ディレクトリ名");
            System.exit(0);
        }
        
        /** 引数(ディレクトリ)取得 */
        String dirname = args[0];
        /** Fileインスタンス作成 */
        File dir = new File(dirname);
        
        /* ディレクトリの作成 */
        if (dir.mkdirs()) {
            System.out.println("ディレクトリの作成に成功しました。");
            System.out.println("絶対パス:" + dir.getAbsolutePath());
        } else {
            System.out.println("ディレクトリの作成に失敗しました");
        }
        
    }
}

実行結果

C:\java\sample>java MakeDir test
ディレクトリの作成に成功しました。
絶対パス:C:\java\sample\test

二次元配列 九九の計算

九九の計算を行い結果を表示するプログラムを作成

fileMultiplicationTable.java
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
public class MultiplicationTable {
    public static void main(String[] args) {
        int[][] value = new int[9][9];
        
        // 配列に値を代入 (九九の計算)
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                value[i][j] = (i + 1) * (j + 1);
            }
        }
 
        // 配列に入っている値を表示
        for (int i = 0; i < value.length; i++) {
            for (int j = 0; j < value[i].length; j++) {
                if (value[i][j] > 9) {
                    System.out.print(value[i][j]);
                } else {
                    System.out.print(" " + value[i][j]);
                }
                
                if (j != value[i].length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

実行結果

 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

二次元配列 ディープコピー

九九の2次元配列を違う2次元配列に逆順にディープコピーして表示する。


※答え合わせ前なので間違っているかも (^^;

fileMultiplicationTable2.java
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
public class MultiplicationTable2 {
    public static void main(String[] args) {
        int[][] value = new int[9][9];
        int[][] value2 = new int[value.length][value[0].length];
        
        // 配列に値を代入 (九九の計算)
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                value[i][j] = (i + 1) * (j + 1);
            }
        }
 
        // 配列に入っている値を表示
        for (int i = 0; i < value.length; i++) {
            for (int j = 0; j < value[i].length; j++) {
                if (value[i][j] > 9) {
                    System.out.print(value[i][j]);
                } else {
                    System.out.print(" " + value[i][j]);
                }
                
                if (j != value[i].length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
 
        System.out.println();
        
        // 配列のディープコピー
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                value2[i][j] = value[value.length - i - 1][value[i].length - j - 1];
            }
        }
        
        // 配列に入っている値を表示
        for (int i = 0; i < value2.length; i++) {
            for (int j = 0; j < value2[i].length; j++) {
                if (value2[i][j] > 9) {
                    System.out.print(value2[i][j]);
                } else {
                    System.out.print(" " + value2[i][j]);
                }
                
                if (j != value2[i].length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();        
        }
    }
}

実行結果

 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

81 72 63 54 45 36 27 18  9
72 64 56 48 40 32 24 16  8
63 56 49 42 35 28 21 14  7
54 48 42 36 30 24 18 12  6
45 40 35 30 25 20 15 10  5
36 32 28 24 20 16 12  8  4
27 24 21 18 15 12  9  6  3
18 16 14 12 10  8  6  4  2
 9  8  7  6  5  4  3  2  1

↓模範解答

fileMultiplicationTable3.java
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
public class MultiplicationTable3 {
    public static void main(String[] args) {
        int[][] value = new int[9][9];
        
        // 配列に値を代入 (九九の計算)
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                value[i][j] = (i + 1) * (j + 1);
            }
        }
        // 配列のコピー(ディープコピー)
        int[][] value2 = new int[value.length][];    //Javaは行ごとに列数を変えられるため ここでは行数のみ定義
        for (int i = value.length - 1, x = 0; i >= 0; i--, x++) {
            value2[x] = new int[value[i].length];    //ターゲットの行の列数を定義
            for (int j = value[i].length - 1, y = 0; j >= 0; j--, y++) {
                value2[x][y] = value[i][j];
            }
        }
 
        // 配列に入っている値を表示
        for (int i = 0; i < value.length; i++) {
            for (int j = 0; j < value[i].length; j++) {
                if (value[i][j] > 9) {
                    System.out.print(value[i][j]);
                } else {
                    System.out.print(" " + value[i][j]);
                }
                
                if (j != value[i].length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        System.out.println();
        
        // 配列に入っている値を表示2
        for (int i = 0; i < value2.length; i++) {
            for (int j = 0; j < value2[i].length; j++) {
                if (value2[i][j] > 9) {
                    System.out.print(value2[i][j]);
                } else {
                    System.out.print(" " + value2[i][j]);
                }
                
                if (j != value2[i].length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

Java TOPに戻る


添付ファイル: fileMultiplicationTable3.java 325件 [詳細] fileMultiplicationTable.java 314件 [詳細] fileMultiplicationTable2.java 349件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2008-02-04 (月) 18:01:06 (3965d)