JavaTM Platform
Standard Ed. 6

java.text
クラス RuleBasedCollator

java.lang.Object
  上位を拡張 java.text.Collator
      上位を拡張 java.text.RuleBasedCollator
すべての実装されたインタフェース:
Cloneable, Comparator<Object>

public class RuleBasedCollator
extends Collator

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

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

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

照合テーブルは照合ルールのリストからなり、それぞれのルールは次の 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 を使う必要があるということです。  

エラー

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

これらのエラーのうちどれかがあると、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」

ニーズに合わせた特殊なルールを持つ RuleBasedCollator オブジェクトを作成するには、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);
 

ルール文字列を連結して新しい照合ルール文字列を作成できます。たとえば、getRules() から返されたルールを連結して、複数の RuleBasedCollator を組み合わせることができます。

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

 
 // 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, 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 を返します。

導入されたバージョン:
1.2
関連項目:
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<Object> 内の equals
オーバーライド:
クラス Collator 内の equals
パラメータ:
obj - 比較対象のテーブルベースの照合オブジェクト
戻り値:
現在のテーブルベースの照合オブジェクトが、テーブルベースの照合オブジェクト obj に等しい場合は true、そうでない場合は false
関連項目:
Object.hashCode(), Hashtable

hashCode

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

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

JavaTM Platform
Standard Ed. 6

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

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。