Java Basic API ~Java Stringクラスを理解するwith JUnit~

イントロダクション

Javaでプログラミングを初めて慣れたころにJavaAPIに触れることが多くなると思います。

よくある「プログラミング練習問題」などで、文字列操作を行うことがあると思います。

この様な時に使用するのがStringクラス手に定義してあるメソッド群だと思います。しかし、説明書きしているJavaDocが難しく理解するのが難しいことが多いと思います。

この解決方法として、動かしてみるというのが手っ取り早い方法の一つだと思いますので、手っ取り早い方法を記載いたします。

JavaSEで提供しているクラスを理解

簡単にプログラムを動かす方法として、IDE(Eclipseを使用します)で動かしてみるのが手っ取り早い方法ですが、如何せんメインメソッドを使用していると毎回コードを書き直さなくてはいけないので面倒です。

なので、以下の方法を提案したく思います。

JUnitを使う

JUnitはテストツールとして使用することが多いもの(フレームワーク)です。これを使用すれば下のように簡単に、いくらでもコードを動かせます。

下のは、String#equalsメソッドをテストしたものですが、「@Test」をつけたメソッドはすべて実行されるので、どんどん作成して実行すればよいのです。
<例>

public class StringTest {

    /** String#equalsのテスト */
    @Test
    public void test01() {
        String st = "aaa";
        String s1 = "aaa";
        String s2 = "bbb";
        String s3 = "ccc";

        if (st.equals(s1)) {
            System.out.println("st == s1");
        } else {
            System.out.println("st != s1");
        }

        if (st.equals(s2)) {
            System.out.println("st != s2");
        } else {
            System.out.println("st == s2");
        }

        if (s3.equals(s1)) {
            System.out.println("s3 == s1");
        } else {
            System.out.println("s3 != s1");
        }
    }
}

実行結果

テストを増やす

StringクラスのJavaDocを見るとよく使うメソッドがあるので、それを紹介するついでに上のテストケースで実行します。
実際の作業を動画にしました。参考にどうぞ。

そして、実行するときにJUnitの設定をする必要があります。

Eclipseを使用しているならば、下のような手順ですぐに使用できます。

JUnitの設定

  1. Eclipeのプロジェクトを右クリック
  2. プロパティを選択
  3. ライブラリの追加をクリック
  4. JUnitを選択し次へ
  5. 次の画面では、完了をクリック

下のように、ライブラリが追加されているはずです。

String#substring

JavaDocでStringクラスを見るとStringクラスの中に定義されているメソッド群があります。説明がちょっと難しく理解に苦しむことがありますが、これを動かしてみれば、ドキュメントの内容がわからなくても問題ありません。逆に、ドキュメントの内容が理解できたりします。

具体的には、上の動画でも実行していますが、下のように実行します。

  1. JavaDocで試したいメソッドを見つける
  2. 対象のメソッドのテストケースを作成する
  3. テストを実行して挙動を確認する

作成したコード(テストケース)は下のような形です。

public class StringTest {

    /** String#equalsのテスト */
    @Test
    public void test01() {
        String st = "aaa";
        String s1 = "aaa";
        String s2 = "bbb";
        String s3 = "ccc";

        if (st.equals(s1)) {
            System.out.println("st == s1");
        } else {
            System.out.println("st != s1");
        }

        if (st.equals(s2)) {
            System.out.println("st != s2");
        } else {
            System.out.println("st == s2");
        }

        if (s3.equals(s1)) {
            System.out.println("s3 == s1");
        } else {
            System.out.println("s3 != s1");
        }
    }

    /**
     * JavaDocをみて、入力(引数)と出力(返却値)を確認後、実装して動かしてみる。
     * {@link String#substring(int)}のテストケース
     */
    @Test
    public void testSubstring() {
        String target = "abcdefg";
        // 2番目の文字を取得する
        String res = target.substring(1, 2);
        System.out.println("2番目の文字: ");
        // 取得結果が正しいか確認
        assertEquals("b", res);
        // 一番初めの文字を取得
        String res1 = target.substring(0, 1);
        assertEquals("a", res1);
        // 一番最後の文字
        String res2 = target.substring(target.length() -1, target.length());
        assertEquals("g", res2);
        // 初めから4文字分を切り出す
        String res3 = target.substring(0, 4);
        assertEquals("abcd", res3);
    }
}

equalsは調べなくてもわかると思いますが、substringはどうでしょうか?
ドキュメントには、下のような説明があります。

この文字列の部分文字列である文字列を返します。部分文字列は、指定されたbeginIndexから始まり、インデックスendIndex - 1にある文字までです。したがって、部分文字列の長さはendIndex-beginIndexになります。

とりあえずは、第一引数に開始、第二引数に終了のインデックス(数値)を設定します。

String res3 = target.substring(0, 4);

実行した結果がどのように取得できるか?これを確かめます。

assertEquals("abcd", res3);

実行後に、いまいちわからない場合は、値を変えてみます。上記の「0, 4」は初めから4文字を取得する場合ですが、2文字目から4文字目までを取得する場合はどうでしょうか?下のように「2, 4」と設定すれば想定通りに動くでしょうか?

String res3 = target.substring(0, 4);

それはテストしてみれば一発です。

assertEquals("取得するであろう値", 結果を格納した変数);

この様な形で、実装すればJavaAPIの理解を深めることができます。

色々なクラスを理解し、技術の幅を広げるのに役に立つと思います。

ちなみに、YoutubeにアップしたJUnit関連の動画はこちらのURLで一覧になっています。再生リストというやつです。

でわでわ。。。

関連ページ一覧

Eclipse セットアップ(Mac版)

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す