Javaコラム Javaエンジニアのためのお役立ちコラム

IT

Javaのcharについて知ろう!Unicodeのコードポイント・Characterクラス

2020年10月25日
SE
Javaのcharとはどのような機能でしょうか。
PM
int型やString型に比べて使う機会は少ないかもしれませんが、Javaの基本をマスターする上では知っておくべき機能です。

Javaのcharとは?


Javaにはcharという基本型があります。int型やString型に比べて使う機会は少ないかもしれませんが、Javaの基本をマスターする上では知っておくべき機能です。この記事でわかりやすく解説するので是非ご覧ください。

Javaのcharは16bit、2byteサイズの小さな型です。値の範囲は0から65535までで、正の数のみである点に注意してください。プラスのみでマイナスの負の数が無い理由は、char型が文字を表すための型だからです。

char型の範囲は0から65535まで

char型が対応している文字コードはUnicodeです。正確にはUnicodeの中でUTF-16だけに対応します。

Unicodeは世界の全ての文字に対応しますが、charの65536種類では基本的な文字しか対応できません。なおUnicode全体では111万以上の文字があります。

ではJavaのcharを使う実例を見てみましょう。以下はとても簡単な例です。

char c = 12354;
System.out.println(c);

”でくくればcharに代入できる

上のJavaサンプルを実行すると、

と表示されます。これはUnicodeで「あ」が12354、「い」が12355…といったように定められているからです。なお以下のようにしても同じ結果になります。char型に文字を代入する場合は”(シングルクオーテーション)でくくれば良いということですね。

char c = ‘あ’;
System.out.println(c);

なお、

char c = ‘あいうえお’;

のようにするとコンパイルエラーになります。char型はあくまで1文字の情報しか持てないということです。

Stringをcharに変換

Javaのchar型とString型の文字列は密接な関係にあって、お互いを変換することができます。まず文字列をcharに変換するやり方は以下の通りです。

String str = “”あいうえお””;
char[] ary = str.toCharArray();
for (int i = 0; i < ary.length; i++) {
System.out.print(ary[i]);
}

これを実行すると、

あいうえお

と表示されます。また以下のように、文字列からchar型で1文字取り出せます。

char c = “”あいうえお””.charAt(2);
System.out.println(c);

charAtは0から数えた個所の文字をchar型で取り出せます。実行結果は以下になります。

charをStringに変換

char型をString型の文字列に変換することもできます。以下のJavaサンプルがその例です。

char[] ary = { ‘あ’, ‘い’, ‘う’, ‘え’, ‘お’ };
String str = new String(ary);
System.out.print(str);

実行結果は、

あいうえお

になります。

char配列から変換せず、以下のように1文字ずつ追加する方法もあります。

String str = “”””;
str += ‘あ’;
str += ‘い’;
str += ‘う’;
System.out.print(str);

結果は以下になります。

あいう

charとStringはあくまでも別の型

char型とString型は相互に変換できることがわかりましたが、それでもcharとStringは別物です。例えば以下のようなコードは比較できないためコンパイルエラーになります。

if (‘あ’ == “”あ””) System.out.println(“”等しいです””);

また以下のコードはコンパイルエラーにはなりませんが、ワーニング(警告)が出て、等しくないという結果になります。

if (“”あ””.equals(‘あ’)) System.out.println(“”等しいです””);

エスケープシーケンスについて

char型ではエスケープシーケンスという方法で、特殊な文字を扱えます。主に使う特殊文字は以下でしょう。

String str = “”””;
str += ‘\t’;
str += “”タブ””;
str += ‘\r’;
str += ‘\n’;
str += “”\t改行\r\n””;
str += ‘\””‘;
str += “”\tダブルクォーテーション\r\n””;
str += ‘\”;
str += “”\tシングルクォーテーション\r\n””;
str += ‘\\’;
str += “”\t\\””;
System.out.println(str);

\を使えば様々な特殊文字が使える

\tはタブで、キーボードの左にあるTabのことです。\r\nは改行ですが、これはWindowsの場合です。Macは\rだけ、UNIXは\nだけで改行できます。改行コードは昔のタイプライターのキャリッジリターン+ラインフィードを再現しているのですが、Windowsは律儀にその2つを省略しなかったということです。

\””や\’は文字列やcharを囲む記号を表示するときに使えます。ただし””の場合は'””‘でも問題ありません。\\は\自体を表示したい時に使えます。

このJavaサンプルの実行結果は以下になります。

タブ
改行
“” ダブルクォーテーション
‘ シングルクォーテーション
\ \

Unicodeのコードポイントを使う

Unicodeの各文字にはコードポイントと言う番号が振られています。char型でそれを使用できます。以下のように、’\u(4桁の数字)’で指定します。

char[] ary = { ‘\u3042′,’\u3044′,’\u3046’ };
String str = new String(ary);
System.out.print(str);

実行結果は以下のようになります。

あいう

Characterクラスについて

JavaにはCharacterというクラスがあります。これはcharの値をラップするためのクラスです。int型のIntegerに相当します。以下のJavaサンプルではCharacterのインスタンスを生成して、そこからまたchar型を取り出して表示しています。

Character cObj = Character.valueOf(‘あ’);
char c = cObj.charValue();
System.out.println(c);

結果は以下になります。

Javaのオートボクシング

Javaにはオートボクシングというクラス型を基本型に変換する機能があります。実はCharacterのインスタンスはchar型の変数に代入するだけで変換してくれるのです。上のサンプルの2行目を、以下のように変えても全く同じように動作します。

char c = cObj;

Characterクラスはどのような時に役立つのでしょうか。まずcharにnullの状態、何もない状態を持たせたい時に役立ちます。char型の0にはちゃんと意味があるのでnullとしては使えません。クラスであるCharacterはnullにできます。

Characterクラスでnullを設定できる

なお以下のようにCharacterクラスがnullの状態でオートボクシングでchar型の変数に代入すると、NullPointerExceptionが発生するので注意しましょう。

Character cObj = null;
char c = cObj;

他のCharacterクラスを使う理由は、ListなどのCollectionにcharを代入したい時でしょう。charはクラスではなく基本型なのでListに追加できませんが、Characterクラスでラップすれば可能になります。

Characterクラスはcharには出来ない事が可能

以下がArrayListとCharacterを使用したJavaサンプルです。char型ではこのような事は出来ません。

ArrayList<Character> list = new ArrayList<Character>();
list.add(Character.valueOf(‘あ’));
list.add(Character.valueOf(‘い’));
list.add(Character.valueOf(‘う’));
for (Character c : list) {
System.out.print(c);
}

実行結果は以下になります。

あいう

SE
Javaのcharの基本的な使い方がよく分かりました。
PM
charとStringの使い分けや、charの値をラップするためのCharacterというクラスについても覚えておきましょう。

Javaのchar型は文字を扱う上での基本

Javaのchar型について解説しましたが、ご理解頂けましたでしょうか。基本型と言われるだけに基本的な内容ですが、Unicodeは奥が深いので興味があれば調べてみてください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags