イントロダクション
今まで、Javaを学習してきて、何気なく使用していたクラスがあります。
気づかいない間に使用しているものもあります。これらはjava.langパッケージに入っているクラス群で、importしなくても使用することができます。
その代表的なクラス(Java API)がStringクラス(文字列)です。
Java を支えるクラスたち
Java APIというとJava言語自体のことを指すのですが、解釈のしかたは人によって違うようです。
しかし、はっきりしているのは「Java言語で使用するクラス群のこと」だということです。
Stringクラスを使う
まずは、プログラムをガンガン実行するための準備をします。
<==プロジェクトの作成とJUnitの設定==>
そうすると、JUnitが使用できるようになります。
==JUnitを使った動画(再生リスト)==
<ミッション1>
以下のクラスを作成して、実行した結果が想定通りになることを確認してください。
手順
- 以下の「作成するパッケージ」を作成する
- 同様に「作成するクラス」を作成する
- 同様に「A. テストケースの作成」を作成する
- 同様に「B. 作成するクラスのフィールド」を作成する
- 同様に「C. 作成するメソッド」を作成する
== 作成するパッケージ ==
practice.自分の名前.util
==作成するクラス==
srcフォルダに、StringUtilsクラスを作成
testフォルダに、StringUtilsTestクラスを作成
==A. テストケースの作成==
以下の処理を確認するテストケースを作成します。
⑴ 2つの引数がどちらも空(から)文字("")、もしくは null の場合、定数EMPTY「0」を返す(retunする)
⑵ 2つの引数が等しい場合、定数EQUAL「1」を返す(returnする)
⑶ 2つの引数が、大文字小文字の区別をしないで、等しい場合、定数IGNORE「2」を返す(returnする)
<テストケース(メソッド)の書き方>
@Test
public void testStringUtils01() {
StringUtils target = new StringUtils();
// 作成するメソッドの<処理>の1の内容を確認する処理
// assertEquals(想定する結果の値, 検証する値);
assertEquals(StringUtils.EMPTY, target.stringTest01("", null));
}
*上の例に習い、2、3の処理を確認する処理を作成しましょう。
==B. 作成するクラスのフィールド==
- 定数EMPTYを整数型「0」で初期化
- 定数EQUALを整数型「1」で初期化
- 定数IGNOREを整数型「2」で初期化
==C. 作成するメソッド==
- 戻り値(返り値): 整数型(int型)
- メソッド名: stringTest1
- 引数リスト: 文字列型 leftStr, 文字列型 rightStr
- 処理内容:
<処理>
a. 引数にある文字列が空("")であれば、定数EMPTYを返す
b. 引数にある文字列 leftStrとrightStrが等しいのであれば、定数 EQUALを返す
c. 引数にある文字列が leftStrとrightStrがであれば、定数IGNOREを返す
<ミッション2>
ミッション1で作成した、StringUtilsTestクラスに、以下のテストケースを追加
・「引数に渡した文字列を大文字に変換することを確認する」
・「引数に渡した文字列を小文字に変換することを確認する」
以下、手順に従いテストケースの作成及び、クラスの作成を行う
手順
*String#toUpperCase()の実装
- StringUtilsクラスのconvertUpper()メソッドの引数に、
文字列「"aaa"」を渡し、結果が「"AAA"」と等しいことを確認する
*String#toLowerCase()の実装
- StringUtilsクラスのconvertLower()メソッドの引数に、
文字列「"TeStA"」を渡し、結果が「"testa"」と等しいことを確認する
*String#startWith()とendWithの実装
- StringUtilsクラスのstartEndWith()メソッドの引数に、
文字列「"starts"」を渡し、結果が「true」と等しいことを確認する - StringUtilsクラスのstartEndWith()メソッドの引数に、
文字列「"start"」を渡し、結果が「false」と等しいことを確認する5. StringUtilsクラスのstartEndWith()メソッドの引数に、
文字列「"atarts"」を渡し、結果が「false」と等しいことを確認する - StringUtilsクラスのstartEndWith()メソッドの引数に、
文字列「"strings"」を渡し、結果が「true」と等しいことを確認する
*String#IndexOf()の実装
- StringUtilsクラスのfindStr()メソッドの引数に、
文字列「"Tesea"」と「"e"」を渡し、結果が「1」と等しいことを確認する - StringUtilsクラスのfindStr()メソッドの引数に、
文字列「"Tesea"」と「"T"」を渡し、結果が「0」と等しいことを確認する
*String#lastIndexOf()の実装
- StringUtilsクラスのfindLastStr()メソッドの引数に、
文字列「"Takashimaya"」と「"a"」を渡し、結果が「1」と等しいことを確認する - StringUtilsクラスのfindLastStr()メソッドの引数に、
文字列「"Tesea"」と「"e"」を渡し、結果が「3」と等しいことを確認する
11 StringUtilsクラスのfindLastStr()メソッドの引数に、
文字列「"Takashimaya"」と「"a"」を渡し、結果が「10」と等しいことを確認する
*String#substring()の実装
12 StringUtilsクラスのsubString()メソッドの引数に、
文字列「"abcdefg"」、整数「0」、整数「3」を渡し、結果が「abc」と等しいことを確認する
13 StringUtilsクラスのsubString()メソッドの引数に、
文字列「"abcdefg"」、整数「3」を渡し、結果が「efg」と等しいことを確認する
14 StringUtilsクラスのsubString()メソッドの引数に、
文字列「"abcdefg"」、整数「3」、整数「7」を渡し、結果が「defg」と等しいことを確認する
*String#trim()の実装(スペースが入っているので注意しましょう)
15 StringUtilsクラスのtrimStr()メソッドの引数に、
文字列「" abcd "」を渡し、結果が「abcd」と等しいことを確認する
16 StringUtilsクラスのtrimStr()メソッドの引数に、
文字列「" a bcd "」を渡し、結果が「a bcd」と等しいことを確認する
*String#replace()の実装
17 StringUtilsクラスのreplaceStr()メソッドの引数に、
文字列「"abcd"」、文字列「”c"」、文字列「"あ"」を渡し、結果が「abあd」と等しいことを確認する
18 StringUtilsクラスのreplaceStr()メソッドの引数に、
文字列「"abcda"」、文字列「”a"」、文字列「"C"」を渡し、結果が「abCd」と等しいことを確認する
*String#replaceAll()の実装
19 StringUtilsクラスのreplaceStr()メソッドの引数に、
文字列「"abcda"」、文字列「”c"」、文字列「"あ"」を渡し、結果が「abあd」と等しいことを確認する
20 StringUtilsクラスのreplaceStr()メソッドの引数に、
文字列「"abcda"」、文字列「”a"」、文字列「"あ"」を渡し、結果が「あbcdあ」と等しいことを確認する
解答例
<StringUtils.java>
public class StringUtils {
/** 定数 */
public static final int EMPTY = 0;
public static final int EQUAL = 1;
public static final int IGNORE = 2;
public static final int ERROR = -1;
public int stringTest01(String str1, String str2) {
if ("".equals(str1)) {
return EMPTY;
}
if ("".equals(str2)) {
return EMPTY;
}
return ERROR;
}
public int stringUtils02(String str1, String str2) {
int result = ERROR;
// if (this.isEmpty(str1, str2)) {
// return ERROR;
// }
if (str1.equals(str2)) {
result = EQUAL;
} else {
result = ERROR;
}
return result;
}
public boolean isEmpty(String str1, String str2) {
if (str1 == null || str2 == null) {
return true;
}
if ("".equals(str1) || "".equals(str2)) {
return true;
}
return false;
}
}
< StringUtilsTest>
public class StringUtilsTest {
@Test
public void testStringUtils01() {
StringUtils target = new StringUtils();
// 作成するメソッドの<処理>の1の内容を確認する処理
// assertEquals(想定する結果の値, 検証する値);
assertEquals(StringUtils.EMPTY, target.stringTest01("", null));
}
@Test
public void testStringUtils02() {
StringUtils target = new StringUtils();
assertEquals(StringUtils.EQUAL, target.stringUtils02("aaa", "aaa"));
assertEquals(StringUtils.ERROR, target.stringUtils02("aaa", "aab"));
//assertEquals(StringUtils.ERROR, target.stringUtils02(null, "aab"));
assertEquals(StringUtils.IGNORE, target.stringUtils02("aaa", "AAA"));
}
}
クラスの扱い方の練習
問題
- プロジェクト「JavaExamTrain」を作成してください、すでにプロジェクトが存在する場合は何もしなくて良いです。
- 以下のパッケージを作成してください
・ practice.exam.mondai
・ practice.exam.mondai.logic- 同様に、添付のファイルをダウンロードもしくはコピーしてソースフォルダ「resources」に「sample.csv」を作成してください、またresourcesフォルダにビルドパスを通してください。
- 以下のクラスを作成してください
・practice.exam.mondai.MondaiMain
・practice.exam.mondai.logic.ExamLogic- ExamLogicクラスに、以下のような実装をしてください。
・返り値(戻り値):なし、メソッド名:printMessage、引数:なし
・String型の配列hako を文字列「50」「sy」「s_」「jo」「5f」「3d」「es」で初期化してください。
・int型の配列hintを数値「3」「1」「2」「4」「0」「5」「6」で初期化してください。
・拡張for文を使って、変数hintの値に対応する番号(添え字)の、変数hakoの文字列を標準出力に出力してください。- ExamLogicクラスに、以下のようなコンストラクタを実装をしてください。
・引数なし
・String型のフィールド変数nameに文字列「タイガー」を代入する
・int型のフィールド変数ageに数値「19」を代入する
・ExamSwordクラス型のフィールド変数swordにExamSwordクラスのインスタンスを代入する
※ExamSwordクラスはMondaiLogicクラスと同じパッケージに作成する- ExamLogicクラスに、以下のようなコンストラクタを実装をしてください。
・引数:文字列
・String型のフィールド変数nameに文字列引数の文字列を代入する
・int型のフィールド変数ageに数値「19」を代入する
・ExamSwordクラス型のフィールド変数swordにExamSwordクラスのインスタンスを代入する
※ExamSwordクラスはMondaiLogicクラスと同じパッケージに作成する
・次のような文字列を表示してください。「[name]」「[age]」はそれぞれフィールド変数を示すものとする
「私の名前は[name]です。[age]才です。エモノは[ExamSword#name]です。」
※[ExamSword#name]はExamSwordクラスのフィールド変数nameを示すものとする。- MondaiMainクラスに以下のような実装をしてください。
・ExamLogic型のフィールド変数logicを作成してください。
・コンストラクタでフィールド変数logicにExamLogicのインスタンスを代入してください。
・メインメソッドで、logicクラスのインスタンス・メソッド「printMessage」を呼び出してください。