マンガで分かる Java入門講座

第6章 文字列と配列
6-5. 文字列1 文字列とString型

「文字列」とは何か、そして文字列を格納する「String」について紹介します。

● 文字列とは

 「文字列」は、複数の文字をまとめて扱うための方法です。

 たとえば"文字列"は、3文字が入った文字列です。また""は、0文字が入った文字列です。

 文字列は文字数が0でも文字列として扱えます。


● String

 文字は基本型のcharで表します。文字列は参照型の「String」で表します。

 文字は「'(シングル クォーテーション)」で文字を囲いました。文字列は「"(ダブル クォーテーション)」で文字列を囲います。

ソースコード)charとString
// 文字(char)の場合
char c = '字';

// 文字列(String)の場合
String s = "文字列";

 文字列はString型のオブジェクトとして利用されます。まだ解説はしていませんが、オブジェクトは通常「new 型( )」として初期化します。これはStringの場合では「new String("文字列")」となります。

 文字列はプログラム中で非常によく使うため、「"文字列"」と書くだけで「new String("文字列")」と同じ意味になります。

ソースコード)Stringの初期化
String s1 = new String("文字列");
String s2 = "文字列";  // 簡易に書ける

● Stringの機能1 length

 Stringオブジェクトの内部には0個以上のcharが格納されています。このcharの数を取得するには「length」を利用します。

ソースコード)length
String s = "文字列";
int i = s.length();      // 変数iにs内のcharの数「3」が入る
System.out.println(i);   // 「3」と出力

String s2 = "";
int i2 = s2.length();    // 変数i2にs2内のcharの数「0」が入る
System.out.println(i2);  // 「0」と出力

● 文字列をコンソールに出力

 文字列をコンソールに出力するには「System.out.println("文字列");」とプログラム中に書けばよいです。

ソースコード)文字列をコンソールに出力
System.out.println("文字列");

● サロゲートペア対応の長さ

 通常の文字は16bitで表現されていますが、文字の中には32bitで表現される、あまり利用されない特殊な文字もあります。

 そういった文字のことを、サロゲートペアと呼ぶのですが、このサロゲートペアの文字はlengthでcharの数を取得すると、1文字でも「char2個分」と数えられてしまいます。

 そういった場合は、codePointCountを使うことで、見た目の文字数を取得できます。

ソースコード)通常の文字の長さ
String s = "丈";
System.out.println(s.length());  // 1文字と出力

int i = s.codePointCount(0, s.length());
System.out.println(i);           // 1文字と出力

ソースコード)サロゲートペア対応の長さ
String s = "𠀋";
System.out.println(s.length());  // 2文字と出力

int i = s.codePointCount(0, s.length());
System.out.println(i);           // 1文字と出力

 しかし、こういった文字は非常に少数です。普通の文字列の場合は「length」を使っても問題ないです。


● Stringの機能2 equals

 参照型では、比較演算子を使わずに「equals」を使います。

ソースコード)同じ内容か確認
String s1 = "文字列1";
String s2 = "文字列2";
if (s1.equals(s2)) {
    // 同じ
    System.out.println("同じ");
} else {
    // 違う
    System.out.println("違う");
}

出力)同じ内容か確認
違う

● Stringを「==」で比較すると?

 実は文字列を「==」で比較した場合、同じ内容の文字列ならtrueになります。

 これはJavaでは、文字列の内容が同じ場合には、同じオブジェクトの参照を、使い回して変数に割り当てることで、メモリーを節約しているからです。

ソースコード)Stringを「==」で比較
String s1 = "文字列";
String s2 = "文字列";

// s1の参照が指すオブジェクトとs2の参照が指すオブジェクトは同じか?
if (s1 == s2) {
    // 同じ
    System.out.println("同じ");
}

出力)Stringを「==」で比較
同じ

 ただし、この方法は正規の方法ではありません。一見すると正しい判定ができているようですが、これは推奨されない方法です。これはたまたま一致してしまうだけです。

 参照型は「equals」で比較するようにしてください。


● Stringの機能3 charAt

 文字列内の特定の位置のcharを取得するには「charAt」を使います。

 この時、文字は「0から始まる」ことに気を付けてください。Javaなどのプログラミングでは、複数のものが並んでいる場合は、0から数え始めます(プログラミング言語によっては、1から始まるものも少数ですがあります)。

ソースコード)charAt
String s = "文字列";
char c = s.charAt(1);   // 変数cには1文字目の'字'が入る
System.out.println(c);  // 「字」と出力

● Stringの機能4 その他

 Stringには、まだまだたくさんの機能があります。それらの機能は、APIリファレンスを参照してください。


この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/05/25  更新:2016/02/09  [Permalink]