今回やること
Javaでは文字列をStringで扱います。ADA-2026という商品コードを使い、文字列が変わらない性質と、3つの基本メソッドを確認します。
前提: Java入門 #4 - 演算子までを終え、変数と
==の意味を理解していること。
| 操作 | 書き方 | この例の結果 |
|---|---|---|
| 長さ | code.length() | 8 |
| 内容比較 | prefix.equals("ADA") | true |
| 部分取得 | code.substring(0, 3) | ADA |
Stringを作る
文字列リテラルはダブルクォートで囲みます。
String code = "ADA-2026";
1文字のcharはシングルクォートですが、Stringは"..."です。Stringはクラスですが、new String(...)を書かずにリテラルから作るのが基本です。
Stringは不変
Stringはimmutable(不変)で、作成後にそのオブジェクトの内容を変更しません。結合すると新しい文字列が作られます。
String prefix = "ADA";
String code = prefix + "-2026";
この後もprefixは"ADA"のままです。結合結果を使いたい時は、codeのような変数で新しい文字列を受け取ります。
prefix → "ADA"
code → "ADA-2026"
lengthで長さを調べる
int length = code.length();
length()はメソッドなので丸括弧を付けます。今回の英数字だけの商品コードは8文字です。絵文字などのUnicodeを利用者が見る「1文字」と数える処理は別の注意が必要ですが、この入門では広げません。
equalsで内容を比べる
String expected = "ADA-2026";
boolean same = code.equals(expected);
Stringの内容比較にはequalsを使います。==は2つの変数が同じオブジェクトを参照しているかを見るため、文字列内容の比較には使いません。
大文字・小文字を区別せず比較するequalsIgnoreCaseもありますが、商品コードの仕様で区別するかを決めてから選びます。
substringで一部を取り出す
String category = code.substring(0, 3);
開始index 0は含み、終了index 3は含みません。そのためindex 0、1、2のADAが返ります。
A D A - 2 0 2 6
0 1 2 3 4 5 6 7
└───┘ substring(0, 3)
範囲は0 <= start <= end <= lengthにします。範囲外はStringIndexOutOfBoundsExceptionです。
完成コードを動かす
StringDemo.javaとして保存します。
public class StringDemo {
public static void main(String[] args) {
String prefix = "ADA";
String code = prefix + "-2026";
int length = code.length();
String category = code.substring(0, 3);
boolean validCategory = category.equals("ADA");
System.out.println("元のprefix: " + prefix);
System.out.println("商品コード: " + code);
System.out.println("長さ: " + length);
System.out.println("カテゴリ: " + category);
System.out.println("カテゴリ一致: " + validCategory);
}
}
javac StringDemo.java
java StringDemo
成功確認
元のprefix: ADA
商品コード: ADA-2026
長さ: 8
カテゴリ: ADA
カテゴリ一致: true
結合後もprefixが変わらず、取り出したcategoryをequalsで比較できれば成功です。
よくあるつまずき
Stringを==で比較する
内容が同じでも期待どおりにならない場合があります。文字列の内容はequalsで比較します。
lengthに丸括弧を付けない
Stringはlength()です。後で学ぶ配列の長さはlengthで、書き方が異なります。
substringの終了位置も含むと思う
substring(0, 3)はindex 3を含みません。開始は含む、終了は含まないと覚えます。
練習
予約番号TOKYO-1234を使い、全体の長さ、substring(0, 5)で取り出した地域、equals("TOKYO")の結果を表示してください。
次のステップ
Java入門 #6 - if-elseで、文字列や数値の比較結果から処理を分けます。