「文字列」は、複数の文字をまとめて扱うための方法です。
たとえば"文字列"は、3文字が入った文字列です。また""は、0文字が入った文字列です。
文字列は文字数が0でも文字列として扱えます。
文字は基本型のcharで表します。文字列は参照型の「String」で表します。
文字は「'(シングル クォーテーション)」で文字を囲いました。文字列は「"(ダブル クォーテーション)」で文字列を囲います。
// 文字(char)の場合 char c = '字'; // 文字列(String)の場合 String s = "文字列";
文字列はString型のオブジェクトとして利用されます。まだ解説はしていませんが、オブジェクトは通常「new 型( )」として初期化します。これはStringの場合では「new String("文字列")」となります。
文字列はプログラム中で非常によく使うため、「"文字列"」と書くだけで「new String("文字列")」と同じ意味になります。
String s1 = new String("文字列"); String s2 = "文字列"; // 簡易に書ける
Stringオブジェクトの内部には0個以上のcharが格納されています。このcharの数を取得するには「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」を使っても問題ないです。
参照型では、比較演算子を使わずに「equals」を使います。
String s1 = "文字列1";
String s2 = "文字列2";
if (s1.equals(s2)) {
// 同じ
System.out.println("同じ");
} else {
// 違う
System.out.println("違う");
}
違う
実は文字列を「==」で比較した場合、同じ内容の文字列ならtrueになります。
これはJavaでは、文字列の内容が同じ場合には、同じオブジェクトの参照を、使い回して変数に割り当てることで、メモリーを節約しているからです。
String s1 = "文字列";
String s2 = "文字列";
// s1の参照が指すオブジェクトとs2の参照が指すオブジェクトは同じか?
if (s1 == s2) {
// 同じ
System.out.println("同じ");
}
同じ
ただし、この方法は正規の方法ではありません。一見すると正しい判定ができているようですが、これは推奨されない方法です。これはたまたま一致してしまうだけです。
参照型は「equals」で比較するようにしてください。
文字列内の特定の位置のcharを取得するには「charAt」を使います。
この時、文字は「0から始まる」ことに気を付けてください。Javaなどのプログラミングでは、複数のものが並んでいる場合は、0から数え始めます(プログラミング言語によっては、1から始まるものも少数ですがあります)。
String s = "文字列";
char c = s.charAt(1); // 変数cには1文字目の'字'が入る
System.out.println(c); // 「字」と出力
Stringには、まだまだたくさんの機能があります。それらの機能は、APIリファレンスを参照してください。