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以上では、オートボクシングがサポートされているので、使うことはないでしょう。
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 仕様を直接ご確認ください。
ここに挙げたのは、次のサンプルで利用するメソッドのみです。
| 修飾子 | 戻り値型 | メソッド | 概要 |
|---|---|---|---|
char | charValue() |
この Character オブジェクトの値を返します。 | |
boolean | equals(Object obj) |
このオブジェクトと指定されたオブジェクトを比較します。 | |
static | int | digit(char ch, int radix) |
指定された基数での、文字 ch の数値としての値を返します。 |
static | char | forDigit(int digit, int radix) |
指定された基数での、指定された数字の文字表現を判定します。 |
static | boolean | isDigit(char ch) |
指定された文字が数字かどうかを判定します。 |
static | boolean | isLetter(char ch) |
指定された文字が汎用文字かどうかを判定します。 |
static | boolean | isLetterOrDigit(char ch) |
指定された文字が汎用文字または数字かどうかを判定します。 |
static | boolean | isUpperCase(char ch) |
指定された文字が大文字かどうかを判定します。 |
static | char | toLowerCase(char ch) |
指定された文字を、対応する小文字にマッピングします。 |
String | toString() |
この文字の値を表す String オブジェクトを返します。 | |
static | char | toUpperCase(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