Java の文字列型 (String)
Java の文字列とは?
String は Java で文字列をあらわす基本的なクラスです。
基本的といってもプリミティブデータタイプとして「文字列」という型があるわけではありません。 Java の標準ライブラリとして用意されている String クラスです。
Java の String リテラルは二重引用符で囲む
二重引用符 " で囲んだ文字列リテラル (定数) は、String オブジェクトとして認識されます。
次の例では、変数 s は Hello という文字を表す String オブジェクトになります。 このため、下の例のように、直接 String クラスのメソッドを呼び出せます。
public class TestApp {
public static void main(String[] args) {
String s = "Hello";
System.out.println(s.toUpperCase()); // HELLO
}
}
C言語の場合は二重引用符で囲った文字列は、単純にメモリ上にその文字が書き込まれ、そのメモリ領域を指し示すポインターになります。Java では String オブジェクトです。
Java の文字列と Unicode
Java の文字は Unicode (UTF-16) です。
このことを実際に、 Java プログラムを実行して確認してみましょう。
UTF-16 と char 型については 「Java の文字型 (char)」をご覧ください。 以下、UTF-16 のエンコーディング方法については知っているものとして説明しています。
はじめに文字列リテラルで String オブジェクトを作成し、文字の符号を確認します。
まず、"ABC" という文字列リテラルから String オブジェクトを作成します。 その String オブジェクトの文字型 (char) を取り出して、char のサイズである 2 バイト長毎の符号を確認します。
package com.keicode.java.test;
public class TestApp {
public static void main(String[] args) {
String s = "ABC";
for (char ch : s.toCharArray()) {
System.out.printf("%c %04X\n", ch, (int) ch);
}
}
}
実行結果は次のようになります。
A 0041
B 0042
C 0043
A は 0x0041、 B は 0x0042、 C は 0x0043 であることが確認できました。
そこで次は、この符号を元にして文字列を作ってみましょう。
文字列リテラルに符号を入力する時は \uXXXX というフォーマットで 16 進数の数値を入力します。
次のコードで 5 行目で、Unicode の符号から文字列を作成しています。
package com.keicode.java.test;
public class TestApp {
public static void main(String[] args) {
String s = "\u0041\u0042\u0043";
System.out.println(s);
}
}
実行結果は次のようになります。
ABC
注意点としては、Unicode のコードポイントを直接入力するのではなく、UTF-16 で符号化した符号を入力するところです。
文字 A の場合は Unicode のコードポイントは U+0041 であり、UTF-16 の符号も 16 進数で 0x0041 です。このため Unicode のコードポイントをそのまま文字列に入力しているともいえます。
しかし、例えば次の Emoji の場合 Unicode のコードポイントは U+1F923 です。
これを UTF-16 でエンコードすると、符号は 0xD83E 0xDD23 になります。
UTF-16 エンコードの方法については「Unicode の UTF-16 エンコーディング手順」をみてください。
Java の文字列では UTF-16 で符号を入力しますから、この Emoji を文字列に書くには "\uD83E\uDD23" とします。"\u1F923" ではないので注意しましょう。
Java の String の基本操作
String オブジェクトでは String クラスの各種メソッドが利用できます。
String オブジェクトのデータの長さを取得する
char の配列から String オブジェクトを作成する
Java で char の配列から String オブジェクトを作成するには、String クラスのコンストラクタに char の配列を渡します。
package com.keicode.java.test;
public class TestApp {
public static void main(String[] args) {
char[] a = {'A', 'B', 'C', 0xD83E, 0xDD23};
String s = new String(a);
System.out.println(s);
}
}
実行結果は次のようになります。
以上、Java の基本的なデータ型である String について説明しました。