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

- システム
エンジニア - Javaのcharとはどのような機能でしょうか。
- プロジェクト
マネージャー - 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);
}
実行結果は以下になります。
あいう
- システム
エンジニア - Javaのcharの基本的な使い方がよく分かりました。
- プロジェクト
マネージャー - charとStringの使い分けや、charの値をラップするためのCharacterというクラスについても覚えておきましょう。
Javaのchar型は文字を扱う上での基本
Javaのchar型について解説しましたが、ご理解頂けましたでしょうか。基本型と言われるだけに基本的な内容ですが、Unicodeは奥が深いので興味があれば調べてみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)