Javaで文字列を処理するには、Stringクラスを使う。
このページではStringクラスを使って文字処理をするための方法を初心者の方向けに解説した。
Javaの基本として理解しておこう。
文字列処理のためのStringオブジェクトへの代入
Stringクラスの基本
複数の文字からなる文字列を表す型はStringクラスだ。
参照型であるStringクラスのオブジェクトへの値の代入は以下のように記述する。
String 変数名 = “あいうえお”;
サンプルコード
Stringクラスのオブジェクトを生成し、値を代入するサンプルコードを見てみよう。
1 2 3 4 5 6 7 8 |
public class StringSample2 { public static void main(String[] args) { String str = "こんにちは"; //[1] System.out.println(str); //[2] str = "こんばんは"; //[3] System.out.println(str); //[4] } } |
実行結果
1 2 |
こんにちは こんばんは |
サンプルコードの説明
とても簡単に見えるが、これまでのモノとは少し違う。
100%理解しなくて構わないので、なんとなく把握しておこう。とりあえず、文字列はこうすると扱える認識でも初心者の方は構わないので、ここから下の説明は飛ばしてしまってもいいくらいだ。
(少し難しい)Stringクラスオブジェクト
実は、Stringはここまでで理解しているような整数型や文字型などの基本型とは違う。一見同じように見えるが、Stringは基本型ではなくて、参照型のオブジェクトだ。
詳しくは下記でお伝えしている。
Stringクラスは内部でオブジェクトを生成する仕組みを持っているため、ほかの基本型のように直接代入するように見える記述方法でオブジェクトが生成され値が代入される。
Stringクラスでは、一度文字列を代入するとその文字列を変更することはできない。
- [1] String型の変数strを宣言し、初期化。→オブジェクトを生成し値を代入。生成されたオブジェクトのアドレスを変数に代入
- [2] 変数strの値を出力。
- [3] 変数str へ値を代入→新しいオブジェクトを生成し値を代入。生成された新しいオブジェクトのアドレスを変数に代入。
- [4] 変数strの値を出力。
文字列「こんにちは」が「こんばんは」へ書き換わるのではなく、変数strに代入される値が「こんにちは」の参照値から「こんばんは」の参照値に変わる。
ここは少し違和感があるかもしれないが、理解していただきたい部分だ。サンプルコードを図で表現すると以下のようになる。
文字列の連結
Java言語での文字列の連結には以下の方法がある。
文字列 + 文字列
String.concat()
実際には他にも種類があるが、徐々に知っていけばいい。まずはこの2つだけ知っておこう。
文字列の連結のサンプルコード
サンプルコードを見てみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class StringSample3 { public static void main(String[] args) { String str1 = "こんにちは。";// [1] String str2 = "山田さん。";// [2] String str3 = "お元気ですか?";// [3] String message;// [4] //「+」演算子を使用 message = str1 + str2; // [5] System.out.println(message); // [6] //concatメソッドを使用 message = message.concat(str3);// [7] System.out.println(message);// [8] } } |
実行結果
1 2 |
こんにちは。山田さん。 こんにちは。山田さん。お元気ですか? |
サンプルコードの説明
- [1] String型の変数str1の宣言と初期化。
- [2] String型の変数str2の宣言と初期化。
- [3] String型の変数str3の宣言と初期化。
- [4] String型の変数messageの宣言。
- [5] 変数messageに変数str1とstr2を連結した文字列を代入
- [6] 変数messageの値を出力
- [7] 変数messageの値にconcate()メソッドを利用して変数str3の文字列を連結
- [8] 変数messageの値を出力
細かいところもお伝えしておくと、Stringクラスで表される文字列は変更できない。文字列の変更のためにStringBufferクラスが用意されている。
「+」演算子での文字列の連結は、内部的にはStringBufferクラスのappendメソッドを使用して文字列の連結を行っている。
例えばfor文などのループ処理の中で+演算子を使用した文字列の連結を行ってしまうと、そのたびにStringBufferオブジェクトを新しく生成してappendメソッドで連結を行うので、無駄なオブジェクトを生成することになり、処理の遅延の原因になったりするので注意が必要だ。
StringBufferクラスについては下記ページで詳しく解説している。
まとめ
このページでは文字処理のためのStringクラスについてお伝えしてきた。
基本データ型ではないが、同じように使える。よくわからなければ、参照型などの細かいところは後々理解していけばいい。まずはStringの使い方をざっくり理解しておこう。