JavaTM 2
Platform
Std. Ed. v1.4.0

java.text
クラス RuleBasedCollator

java.lang.Object
  |
  +--java.text.Collator
        |
        +--java.text.RuleBasedCollator
すべての実装インタフェース:
Cloneable, Comparator

public class RuleBasedCollator
extends Collator

RuleBasedCollator クラスは Collator の具象サブクラスで、簡単な操作でデータドリブンのテーブルコレータを使用可能にします。このクラスを使うと、カスタマイズしたテーブルベースの Collator を作成することができます。RuleBasedCollator は、文字をソートキーにマップします。

効率化のために、RuleBasedCollator には次の制約があります (さらに複雑な言語には他のサブクラスが使用される)。

  1. <修飾子> によって制御される特別な照合ルールが指定されると、コレータオブジェクト全体に適用される
  2. 記述のないすべての Unicode 文字は、照合順序の最後にくる

照合テーブルは照合ルールのリストからなり、それぞれのルールは次の 3 つの形式のどれかをとります。

    <修飾子>
    <関係文字> <テキスト引数>
    <リセット文字> <テキスト引数>
ルール要素の定義は次のとおりです。

これは実際よりも複雑に感じられます。たとえば次の例は、同じことを同等の方法で表したものです。

 a < b < c
 a < b & b < c
 a < c & a < b
 
テキスト引数のすぐ後に次の項目がくるので、順序が重要です。次の例は、同等ではありません。
 a < b & a < c
 a < c & a < b
 
シーケンスには、テキスト引数がすでに存在するか、そのテキスト引数の最初の部分文字列が存在しなければなりません (たとえば、"a < b & ae < e" は有効。シーケンスにおいて "a" は、"ae" がリセットされるより前にあるため)。この後者のケースで、"ae" は 1 文字として入力されず、そのようには扱われません。"e" は、2 文字 ("a" に続く "e") に拡張されたかのようにソートされます。この違いは、自然言語に見られます。従来のスペイン語の "ch" は単一文字に短縮されたかのように処理されます ("c < ch < d" と表現される)。一方、従来のドイツ語の a ウムラウトは、2 つの文字に拡張されたかのように処理されます ("a,A < b,B ... &ae;\u00e3& AE;\u00c3" と表現される)。[\u00e3 および \u00c3 は a ウムラウトのエスケープシーケンスです。]

無視可能な文字

無視可能な文字の場合、最初のルールは、関係文字で始まらなければなりません (上の例は実際には一部を表している。つまり、"a < b" は実際には "< a < b" であるべき)。しかし、最初の関係文字が "<" でなければ、最初の "<" までのすべてのテキスト引数は無視できます。たとえば、", - < a < b" では "-" が無視できる文字です。これは、前に "black-birds" という語で見たとおりです。他の言語の例を見れば、ほとんどのアクセントが無視できることがわかります。

正規化とアクセント

RuleBasedCollator は自動的にそのルールテーブルを処理することにより、事前合成済みバージョンと結合文字バージョンのアクセント付き文字がどちらも含まれるようにします。提供されているルール文字列がベース文字と独立した結合アクセント文字からのみ構成される場合、ルール文字列の文字のすべての標準的な組み合わせに一致する事前合成済みアクセント付き文字がテーブルに入力されます。

これで、コレータが NO_DECOMPOSITION に設定されているときでも、RuleBasedCollator を使ってアクセント付き文字列を比較できます。ただし、注意すべき点が 2 つあります。1 つ目は、照合対象の文字列が標準的な順序にない結合シーケンスを保持している場合、コレータを CANONICAL_DECOMPOSITION または FULL_DECOMPOSITION に設定して結合シーケンスのソートを可能にする必要があるということです。もう 1 つは、文字列が分解互換の文字 (完全幅や半分幅などの形式) を保持する場合、ルールテーブルには標準的なマッピングのみが含まれるので FULL_DECOMPOSITION を使う必要があるということです。詳細は、「The Unicode Standard, Version 2.0」を参照してください。

エラー

次の場合は、エラーになります。

これらのエラーのうちどれかがあると、RuleBasedCollatorParseException をスローします。

簡単な例: "< a < b < c < d"

ノルウェー語: "< a,A< b,B< c,C< d,D< e,E< f,F< g,G< h,H<i,I< j,J < k,K< l,L< m,M< n,N< o,O< p,P< q,Q< r,R< s,S< t,T < u,U< v,V< w,W< x,X< y,Y< z,Z < \u00E5=a\u030A,\u00C5=A\u030A ;aa,AA< \u00E6,\u00C6< \u00F8,\u00D8"

通常、ルールベースの Collator オブジェクトを作成するには、Collator のファクトリメソッド getInstance を使用します。しかし、ニーズに合わせた特殊なルールを持つルールベースの Collator オブジェクトを作成するには、String オブジェクトにルールを指定して、RuleBasedCollator を構築します。たとえば、次のようにします。

 String Simple = "< a< b< c< d";
 RuleBasedCollator mySimple = new RuleBasedCollator(Simple);
 
または:
 String Norwegian = "< a,A< b,B< c,C< d,D< e,E< f,F< g,G< h,H< i,I< j,J" +
                 "< k,K< l,L< m,M< n,N< o,O< p,P< q,Q< r,R< s,S< t,T" +
                 "< u,U< v,V< w,W< x,X< y,Y< z,Z" +
                 "< \u00E5=a\u030A,\u00C5=A\u030A" +
                 ";aa,AA< \u00E6,\u00C6< \u00F8,\u00D8";
 RuleBasedCollator myNorwegian = new RuleBasedCollator(Norwegian);
 

Collator を結合するのは、文字列を結合するとの同じくらい簡単です。次の例は、2 つの異なるロケールの 2 つの Collator を結合する例です。

 // Create an en_US Collator object
 RuleBasedCollator en_USCollator = (RuleBasedCollator)
     Collator.getInstance(new Locale("en", "US", ""));
 // Create a da_DK Collator object
 RuleBasedCollator da_DKCollator = (RuleBasedCollator)
     Collator.getInstance(new Locale("da", "DK", ""));
 // Combine the two
 // First, get the collation rules from en_USCollator
 String en_USRules = en_USCollator.getRules();
 // Second, get the collation rules from da_DKCollator
 String da_DKRules = da_DKCollator.getRules();
 RuleBasedCollator newCollator =
     new RuleBasedCollator(en_USRules + da_DKRules);
 // newCollator has the combined rules
 

もう 1 つの例では、既存のテーブルを変更して新しい Collator オブジェクトを作成します。たとえば、"& C < ch, cH, Ch, CH" を en_USCollator オブジェクトに追加して、独自のテーブルを作成します。

 // Create a new Collator object with additional rules
 String addRules = "&C< ch, cH, Ch, CH";
 RuleBasedCollator myCollator =
     new RuleBasedCollator(en_USCollator + addRules);
 // myCollator contains the new rules
 

次の例は、非スペーシングアクセントの順序を変更する方法を示しています。

 // old rule
 String oldRules = "=\u0301;\u0300;\u0302;\u0308"    // main accents
                 + ";\u0327;\u0303;\u0304;\u0305"    // main accents
                 + ";\u0306;\u0307;\u0309;\u030A"    // main accents
                 + ";\u030B;\u030C;\u030D;\u030E"    // main accents
                 + ";\u030F;\u0310;\u0311;\u0312"    // main accents
                 + "< a , A ; ae, AE ; \u00e6 , \u00c6"
                 + "< b , B < c, C < e, E & C < d, D";
 // change the order of accent characters
 String addOn = "& \u0300 ; \u0308 ; \u0302";
 RuleBasedCollator myCollator = new RuleBasedCollator(oldRules + addOn);
 

最後の例では、新しい主要順序をデフォルトの設定より前に置く方法を示します。たとえば、日本語 Collator では、英語の文字を日本語の文字より前にソートすることも、後にソートすることもできます。

 // get en_US Collator rules
 RuleBasedCollator en_USCollator = (RuleBasedCollator)Collator.getInstance(Locale.US);
 // add a few Japanese character to sort before English characters
 // suppose the last character before the first base letter 'a' in
 // the English collation rule is \u2212
 String jaString = "& \u2212 < \u3041, \u3042 < \u3043, \u3044";
 RuleBasedCollator myJapaneseCollator = new
     RuleBasedCollator(en_USCollator.getRules() + jaString);
 

関連項目:
Collator, CollationElementIterator

フィールドの概要
 
クラス java.text.Collator から継承したフィールド
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY
 
コンストラクタの概要
RuleBasedCollator(String rules)
          RuleBasedCollator のコンストラクタです。
 
メソッドの概要
 Object clone()
          標準オーバーライドです。
 int compare(String source, String target)
          2 つの異なる文字列に格納された文字データを、照合ルールに従って比較します。
 boolean equals(Object obj)
          2 つの照合オブジェクトが等しいかどうかを比較します。
 CollationElementIterator getCollationElementIterator(CharacterIterator source)
          指定された String の CollationElementIterator を返します。
 CollationElementIterator getCollationElementIterator(String source)
          指定された String の CollationElementIterator を返します。
 CollationKey getCollationKey(String source)
          文字列を、CollationKey.compareTo で比較できる一連の文字に変換します。
 String getRules()
          照合オブジェクトに対するテーブルベースルールを取得します。
 int hashCode()
          テーブルベース照合オブジェクトのハッシュコードを生成します。
 
クラス java.text.Collator から継承したメソッド
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
 
クラス java.lang.Object から継承したメソッド
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

RuleBasedCollator

public RuleBasedCollator(String rules)
                  throws ParseException
RuleBasedCollator のコンストラクタです。テーブルルールから照合テーブルを構築します。照合ルール構文の詳細は、RuleBasedCollator クラスの説明を参照してください。

パラメータ:
rules - 照合テーブルを構築する元になる照合ルール
例外:
ParseException - ルールの構築プロセスが失敗すると、フォーマット例外がスローされる。たとえば、構築ルールの "a < ? < d" は「?」が引用符で囲まれていないので、コンストラクタにより ParseException がスローされる
関連項目:
Locale
メソッドの詳細

getRules

public String getRules()
照合オブジェクトに対するテーブルベースルールを取得します。

戻り値:
テーブル照合オブジェクトが生成される元になった照合ルール

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(String source)
指定された String の CollationElementIterator を返します。

関連項目:
CollationElementIterator

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(CharacterIterator source)
指定された String の CollationElementIterator を返します。

関連項目:
CollationElementIterator

compare

public int compare(String source,
                   String target)
2 つの異なる文字列に格納された文字データを、照合ルールに従って比較します。ある言語において、ある文字列が、別の文字列より大きいか、小さいか、または等しいかを返します。これは、サブクラスでオーバーライドすることができます。

定義:
クラス Collator 内の compare
パラメータ:
source - ソース文字列
target - ターゲット文字列
戻り値:
整数値。ソースがターゲットより小さければ、値はゼロより小さい。ソースがターゲットに等しければ、値はゼロ。ソースがターゲットより大きければ、値はゼロより大きい
関連項目:
CollationKey, Collator.getCollationKey(java.lang.String)

getCollationKey

public CollationKey getCollationKey(String source)
文字列を、CollationKey.compareTo で比較できる一連の文字に変換します。これは、java.text.Collator.getCollationKey をオーバーライドします。また、サブクラスでオーバーライドすることができます。

定義:
クラス Collator 内の getCollationKey
パラメータ:
source - 照合キーに変換する文字列
戻り値:
Collator の照合ルールに基づく、指定された String に対する CollationKey。ソース String が null の場合は null の CollationKey が返される
関連項目:
CollationKey, Collator.compare(java.lang.String, java.lang.String)

clone

public Object clone()
標準オーバーライドです。セマンティクスは変わりません。

オーバーライド:
クラス Collator 内の clone
戻り値:
このインスタンスの複製
関連項目:
Cloneable

equals

public boolean equals(Object obj)
2 つの照合オブジェクトが等しいかどうかを比較します。

定義:
インタフェース Comparator 内の equals
オーバーライド:
クラス Collator 内の equals
パラメータ:
obj - 比較対象のテーブルベースの照合オブジェクト
戻り値:
現在のテーブルベースの照合オブジェクトが、テーブルベースの照合オブジェクト obj に等しい場合は true、そうでない場合は false

hashCode

public int hashCode()
テーブルベース照合オブジェクトのハッシュコードを生成します。

定義:
クラス Collator 内の hashCode
戻り値:
このオブジェクトのハッシュコード値
関連項目:
Object.equals(java.lang.Object), Hashtable

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.