Character クラス

Revised: May/5th/2008: Since: Jan./1st/2002

UNICODE文字を表す基本データ型であるchar型のラッパー・クラスです。char型とのボクシング変換がサポートされています。

クラス階層

java.lang.Object
  |
  +--java.lang.Character

概要

API 仕様では次のように説明されています:

Character クラスは、プリミティブ型 char の値をオブジェクトにラップします。Character 型のオブジェクトには、型が char の単一フィールドが含まれます。

また、このクラスは、文字のカテゴリ (小文字、数字など) を決定したり、大文字から小文字 (およびその逆) の変換を行ういくつかのメソッドも提供します。

文字情報は、Unicode Standard、バージョン 4.0 に基づきます。

コンストラクタ

Integerクラスと同様に、Character型オブジェクトは、コンストラクタではなく、ボクシング変換を使うことが一般的です。

class TestCharacter {
	public static void main(String[] args) {
		Character c1 = '\u0001';
		Character c2 = 'あ';
		System.out.println(c1);
		System.out.println(c2);
	}
}

char型を引数の持つコンストラクタと、メソッドvaluOf(char c)も用意されています。しかし、J2SE 5.0以上では、オートボクシングがサポートされているので、使うことはないでしょう。

UNICODE 4.0

J2SE 5.0以上で、UNICODE 4.0 UTF-16サポートが追加されました。従来は、BMP(基本多言語面)と呼ばれる、\u0000\uffffまでの文字を扱います(charの範囲と同じ)。J2SE 5.0以上では、\uffffよりも大きなコードポイントの文字(補助文字)をchar値のペアで表現します。これをサロゲートペアと呼び、上位サロゲートのコード範囲は\uD800\uDBFF、下位サロゲートのコード範囲は\uDC00-\uDFFFです。つまり、BOM (Byte Order Mark)はビッグエンディアンです。

Characterクラスのメソッドは、従来はchar型(16ビット符号なし整数)の引数しか持ちませんでしたが、J2SE 5.0でint型を引数に採るようにオーバーロードされています。int型引数でコードポイントを指定できる場合、その引数はCharacter.MAX_CODE_POINT U+10FFFF以下。つまり下位21ビット)以下の正の数である必要があります。

CharSecuence#length()String#length()は、BMP範囲内の文字は1で返しますが、サロゲートペアで表現された文字は2で返します。

Java SEでサポートされているコンバータは、java.sun.comのページを参照してください。例えば、UTF-32では、BE(ビッグエンディアン)/LE(リトルエンディアン)、BOM有り/無しがサポートされています。

なお、2008年5月現在のUNICODEの最新版はUnicode 5.1 (2008-04-04)です。

class TestCharacter2 {
	public static void main(String[] args) {
		System.out.println("UNICODEの境界値");
		System.out.println("MAX_CODE_POINT     = " + Character.MAX_CODE_POINT);
		System.out.println("MAX_SURROGATE      = " + Character.MAX_SURROGATE);
		System.out.println("MIN_CODE_POINT     = " + Character.MIN_CODE_POINT);
		System.out.println("MIN_SURROGATE      = " + Character.MIN_SURROGATE);
		System.out.println("MAX_HIGH_SURROGATE = " + Integer.toHexString(Character.toString(Character.MAX_HIGH_SURROGATE).codePointAt(0)));
		System.out.println("MIN_HIGH_SURROGATE = " + Integer.toHexString(Character.toString(Character.MIN_HIGH_SURROGATE).codePointAt(0)));
		System.out.println("MAX_LOW_SURROGATE  = " + Integer.toHexString(Character.toString(Character.MAX_LOW_SURROGATE).codePointAt(0)));
		System.out.println("MIN_LOW_SURROGATE  = " + Integer.toHexString(Character.toString(Character.MIN_LOW_SURROGATE).codePointAt(0)));
	}
}
D:\java>javac TestCharacter2.java

D:\java>java TestCharacter2
UNICODEの境界値
MAX_CODE_POINT     = 1114111
MAX_SURROGATE      = ?
MIN_CODE_POINT     = 0
MIN_SURROGATE      = ?
MAX_HIGH_SURROGATE = dbff
MIN_HIGH_SURROGATE = d800
MAX_LOW_SURROGATE = dfff
MIN_LOW_SURROGATE = dc00

D:\java>

メソッド

メソッド、メンバ変数については、沢山あるので全ては紹介しません。詳細は API 仕様を直接ご確認ください。

ここに挙げたのは、次のサンプルで利用するメソッドのみです。

修飾子戻り値型メソッド概要
charcharValue() この Character オブジェクトの値を返します。
booleanequals(Object obj) このオブジェクトと指定されたオブジェクトを比較します。
staticintdigit(char ch, int radix) 指定された基数での、文字 ch の数値としての値を返します。
staticcharforDigit(int digit, int radix) 指定された基数での、指定された数字の文字表現を判定します。
staticbooleanisDigit(char ch) 指定された文字が数字かどうかを判定します。
staticbooleanisLetter(char ch) 指定された文字が汎用文字かどうかを判定します。
staticbooleanisLetterOrDigit(char ch) 指定された文字が汎用文字または数字かどうかを判定します。
staticbooleanisUpperCase(char ch) 指定された文字が大文字かどうかを判定します。
staticchartoLowerCase(char ch) 指定された文字を、対応する小文字にマッピングします。
StringtoString() この文字の値を表す String オブジェクトを返します。
staticchartoUpperCase(char ch) 文字の引数を対応する大文字に変換します。

サンプル

class TestCharacter3 {
	public static void main(String args[]) {
		System.out.println("----インスタンスメソッドの利用----");
		//インスタンス化
		Character objChar1, objChar2;
		// J2SE 1.4以下
		// objChar1 = Character.valuOf('a');
		// objChar1 = Character.valuOf('5');
		// J2SE 5.0以上
		objChar1 = 'a';	// オートボクシング
		objChar2 = '5';	// オートボクシング

		// J2SE 1.4以下
		// System.out.println("objChar1: " + objChar1.charValue());
		// System.out.println("objChar1: " + objChar2.charValue());
		// J2SE 5.0以上
		System.out.println("objChar1: " + objChar1);	// アンボクシング
		System.out.println("objChar2: " + objChar2);	// アンボクシング

		boolean bln = objChar1.equals(objChar2);
		System.out.println("objChar1 = objChar2? " + bln);

		//static メソッドの利用
		System.out.println("----静的メソッドの利用------------");
		char ch = 'a';
		boolean bln1 = Character.isLetterOrDigit(ch);
		boolean bln2 = Character.isDigit(ch);

		System.out.println("ch: " + ch);

		if(bln1 == false) {
			System.out.println("汎用文字でも数字もありません。");
		} else if(bln2 == false) {
			System.out.println("汎用文字です。");

			boolean bln3 = Character.isUpperCase(ch);
			if(bln3 == false){
				char chU = Character.toUpperCase(ch);
				System.out.println("大文字にします: " + chU);
			} else {
				System.out.println("大文字です。");
			}

		} else {
			System.out.println("数字です。");
		}
	}
}
C:\Java>javac TestCharacter.java

C:\Java>java TestCharacter
----インスタンスメソッドの利用----
objChar1: a
objChar2: 5
objChar1=objChar2? false
----静的メソッドの利用------------
ch: a
汎用文字です。
大文字にします: A


Copyright © 2001-2008 SUGAI, Manabu. All Rights Reserved.