全パッケージ  クラス階層  このパッケージ  前項目  次項目  インデックス

クラス java.text.RuleBasedCollator

java.lang.Object
   |
   +----java.text.Collator
           |
           +----java.text.RuleBasedCollator

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

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

  1. フランス語の第2順序は、Collatorオブジェクト全部に適用されます。
  2. 記述のないすべてのUnicode文字は、照合順序の最後にきます。

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

    < 修飾子 >
    < 関係 > < テキスト引数 >
    < リセット > < テキスト引数>
 
照合ルールの作成方法を次に示します。

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

 a < b < c
 a < b & b < c
 a < c & a < b
 
テキスト引数のすぐ後に次の項目が来るので、順序が重要です。次の2つは同じではありません。
 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" (aウムラウト)は、2つの文字に拡張されたかのように処理されます("a,A < b,B ... & ae,a & AE,A"と表現される)。

無視可能な文字

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

正規化とアクセント

Collatorオブジェクトは、可能な限り、テキストを内部的に正規化して、ベースの文字からアクセントを切り離します。これは、ルールを処理するときと、2つの文字列を比較するときに行われます。さらに、Collatorは、Unicode正規ッピングを使って、結合された複数のシーケンスが正しくソートされるようにします。(詳しくは、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
 

もう一つ面白い例は、既存のテーブルを変更して新しい 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 ?
 String jaString = "& \u2212 < \u3041, \u3042 < \u3043, \u3044";
 RuleBasedCollator myJapaneseCollator = new
     RuleBasedCollator(en_USCollator.getRules() + jaString);
 

参照:
Collator, CollationElementIterator

Constructor Index

 o RuleBasedCollator(String)
RuleBasedCollator構築子です。

Method Index

 o clone()
標準オーバーライドです。セマンティックスは変わりません。
 o compare(String, String)
2つの異なる文字列に格納された文字データを照合ルールに従って比較します。
 o equals(Object)
2つの照合オブジェクトが等しいかどうかを比較します。
 o getCollationElementIterator(String)
与えられたStringのCollationElementIteratorを返します。
 o getCollationKey(String)
文字列を、CollationKey.compareToで比較できる一連の文字に変換します。
 o getRules()
照合オブジェクトに対するテーブルベースルールを入手します。
 o hashCode()
テーブルベースの照合オブジェクトのハッシュコードを生成します。

Constructors

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

パラメータ:
rules - 照合テーブルを構築する元になる照合ルール
例外: ParseException
ルールの構築プロセスが失敗すると、フォーマット例外がスローされます。たとえば、構築ルール"a < b c < d"の場合、構築子によってParseExceptionがスローされます。
参照:
Locale

Methods

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

返り値:
テーブル照合オブジェクトが作成される元になった照合ルールを返します。
 o getCollationElementIterator
  public CollationElementIterator getCollationElementIterator(String source)
与えられたStringのCollationElementIteratorを返します。

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

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

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

オーバーライド:
クラス Collatorclone
 o equals
  public boolean equals(Object obj)
2つの照合オブジェクトが等しいかどうかを比較します。

パラメータ:
obj - これと比較するテーブルベースの照合オブジェクト
返り値:
現在のテーブルベースの照合オブジェクトが、テーブルベースの照合オブジェクトobjと等しければ真を、等しくなければ偽を返します。
オーバーライド:
クラス Collatorequals
 o hashCode
  public int hashCode()
テーブルベース照合オブジェクトのハッシュコードを生成します。

オーバーライド:
クラス CollatorhashCode

全パッケージ  クラス階層  このパッケージ  前項目  次項目  インデックス