- すべての実装されたインタフェース:
Cloneable
,Comparator<Object>
RuleBasedCollator
クラスはCollator
の具象サブクラスで、簡単な操作でデータ・ドリブンのテーブル・コレータを使用可能にします。 このクラスを使うと、カスタマイズしたテーブル・ベースのCollator
を作成することができます。 RuleBasedCollator
は、文字をソート・キーにマップします。
効率化のために、RuleBasedCollator
には次の制約があります(さらに複雑な言語にはほかのサブクラスが使用される)。
- <修飾子>によって制御される特別な照合ルールが指定されると、コレータ・オブジェクト全体に適用される。
- 記述のないすべての文字は、照合順序の最後にくる。
照合テーブルは照合ルールのリストからなり、それぞれのルールは次の3つの形式のどれかをとります。
<modifier> <relation> <text-argument> <reset> <text-argument>ルール要素の定義は次のとおりです。
- テキスト引数:テキスト引数は、特殊文字(つまり、一般的な空白文字[0009-000D, 0020]とルール構文文字[0021-002F, 003A-0040, 005B-0060, 007B-007E])以外であればどのような文字シーケンスでもかまいません。 こうした特殊文字が必要であれば、単一引用符で囲みます(アンパサンド=> '&'など)。 ただし、引用符で囲まれていない空白文字は無視されるので注意してください。たとえば、
b c
はbc
として処理されます。 - 修飾子: 現在は、特別な照合ルールをオンにする修飾子が2つあります。
- '@' : フランス語のように、アクセント(第2相違)の逆方向のソートをオンにする。
- '!' : タイ語/ラオ語の母音と子音のスワップをオンにする。 タイ語の母音\U0E40-\U0E44が子音\U0E01-\U0E2Eに先行する、またはラオ語の母音\U0EC0-\U0EC4が子音\U0E81-\U0EAEに先行する場合にこのルールが適用されると、照合のために母音は子音のあとに配置される。
'@' : アクセントがフランス語のように逆方向にソートされることを示します。
- 関係文字: 関係文字には次のものがあります。
- '<' : より大きい、文字相違の場合(第1)
- ';' : より大きい、アクセント相違の場合(第2)
- ',' : より大きい、ケース(大文字と小文字)相違の場合(第3)
- '=' : 等しい
- リセット文字: 主に短縮と拡張のために使用しますが、ルール・セットの終わりに修正を追加するためにも使用できるリセットが文字1つあります。
'&': 次のルールが、リセット・テキスト引数がソートされる位置に続くことを示します。
これは実際よりも複雑に感じられます。 たとえば次の例は、同じことを同等の方法で表したものです。
テキスト引数のすぐ後に次の項目がくるので、順序が重要です。 次の例は、同等ではありません。a < b < c a < b & b < c a < c & a < b
シーケンスには、テキスト引数がすでに存在するか、そのテキスト引数の最初の部分文字列が存在しなければいけません。(たとえば、「a < b & ae < e」は有効シーケンスにおいて「a」は、「ae」がリセットされるより前にあるため)。 この後者のケースで、「ae」は1文字として入力されず、そのようには扱われません。「e」は、2文字(「a」に続く「e」)に拡張されたかのようにソートされます。 この違いは、自然言語に見られます。 in traditional Spanish "ch" is treated as though it contracts to a single character (expressed as "c < ch < d"), while in traditional German a-umlaut is treated as though it expanded to two characters (expressed as "a,A < b,B ... &ae;\u00e3&AE;\u00c3").u00e3および\u00c3はaウムラウトのエスケープ・シーケンスです。a < b & a < c a < c & a < b
無視可能な文字
無視可能な文字の場合、最初のルールは、関係文字で始まる必要があります(上の例は実際には一部を表している。つまり、「a < b」は実際には「< a < b」であるべき)。 しかし、最初の関係文字が「<」でなければ、最初の「<」までのすべてのテキスト引数は無視できます。 たとえば、「, - < a < b」では「-」が無視できる文字です。これは、前に「black-birds」という語で見たとおりです。 ほかの言語の例を見れば、ほとんどのアクセントが無視できることがわかります。
正規化とアクセント
RuleBasedCollator
は自動的にそのルール・テーブルを処理することにより、事前合成済みバージョンと結合文字バージョンのアクセント付き文字がどちらも含まれるようにします。 提供されているルール文字列がベース文字と独立した結合アクセント文字からのみ構成される場合、ルール文字列の文字のすべての正規の組み合わせに一致する事前合成済みアクセント付き文字がテーブルに入力されます。
これで、コレータがNO_DECOMPOSITIONに設定されているときでも、RuleBasedCollatorを使ってアクセント付き文字列を比較できます。 ただし、注意すべき点が2つあります。 1つめは、照合対象の文字列が標準的な順序にない結合シーケンスを保持している場合、コレータをCANONICAL_DECOMPOSITIONまたはFULL_DECOMPOSITIONに設定して結合シーケンスのソートを可能にする必要があるということです。 もう1つは、文字列が分解互換の文字(完全幅や半分幅などの形式)を保持する場合、ルール・テーブルには正規のマッピングのみが含まれるのでFULL_DECOMPOSITIONを使う必要があるということです。
エラー
次の場合は、エラーになります。
- テキスト引数に引用符で囲まれていない句読文字がある(「a < b-c < d」など)。
- 関係文字やリセット文字のあとにテキスト引数がない(「a < ,b」など)。
- テキスト引数(またはテキスト引数の最初の部分文字列)がシーケンスにまだないのにリセット文字がある。(「a < b & e < f」など)
RuleBasedCollator
がParseException
をスローします。
例
簡単な例: "< 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 < \u00E6,\u00C6 < \u00F8,\u00D8 < \u00E5 = a\u030A,\u00C5 = A\u030A; aa, AA"
ニーズに合わせた特殊なルールを持つ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" + "< \u00E6, \u00C6" + // Latin letter ae & AE "< \u00F8, \u00D8" + // Latin letter o & O with stroke "< \u00E5 = a\u030A," + // Latin letter a with ring above " \u00C5 = A\u030A;" + // Latin letter A with ring above " aa, AA"; 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);
- 導入されたバージョン:
- 1.1
- 関連項目:
Collator
、CollationElementIterator
-
フィールドのサマリー
クラス java.text.Collatorで宣言されたフィールド
CANONICAL_DECOMPOSITION, FULL_DECOMPOSITION, IDENTICAL, NO_DECOMPOSITION, PRIMARY, SECONDARY, TERTIARY
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明clone()
標準オーバーライドです。セマンティックスは変わりません。int
2つの異なる文字列に格納された文字データを、照合ルールに従って比較します。boolean
2つの照合オブジェクトが等しいかどうかを比較します。getCollationElementIterator(String source)
指定されたStringのCollationElementIteratorを返します。指定されたCharacterIteratorのCollationElementIteratorを返します。getCollationKey(String source)
文字列を、CollationKey.compareToで比較できる一連の文字に変換します。getRules()
照合オブジェクトに対するテーブル・ベース・ルールを取得します。int
hashCode()
テーブル・ベース照合オブジェクトのハッシュ・コードを生成します。クラス java.text.Collatorで宣言されたメソッド
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
インタフェース java.util.Comparatorで宣言されたメソッド
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
コンストラクタの詳細
-
RuleBasedCollator
public RuleBasedCollator(String rules) throws ParseExceptionRuleBasedCollatorのコンストラクタです。 テーブル・ルールから照合テーブルを構築します。 照合ルール構文の詳細は、RuleBasedCollatorクラスの説明を参照してください。- パラメータ:
rules
- 照合テーブルを構築する元になる照合ルール。- 例外:
ParseException
- ルールの構築プロセスが失敗すると、フォーマット例外がスローされる。 たとえば、構築ルール「a < ? < d」は「?」が引用符で囲まれていないので、コンストラクタによりParseExceptionがスローされる。- 関連項目:
Locale
-
-
メソッドの詳細
-
getRules
public String getRules()照合オブジェクトに対するテーブル・ベース・ルールを取得します。- 戻り値:
- テーブル照合オブジェクトが生成される元になった照合ルールを返す。
-
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(String source)指定されたStringのCollationElementIteratorを返します。- パラメータ:
source
- 照合される文字列- 戻り値:
CollationElementIterator
オブジェクト- 関連項目:
CollationElementIterator
-
getCollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)指定されたCharacterIteratorのCollationElementIteratorを返します。- パラメータ:
source
- 照合される文字イテレータ- 戻り値:
CollationElementIterator
オブジェクト- 導入されたバージョン:
- 1.2
- 関連項目:
CollationElementIterator
-
compare
2つの異なる文字列に格納された文字データを、照合ルールに従って比較します。 ある言語において、ある文字列が、別の文字列より大きいか、小さいか、または等しいかを返します。 これは、サブクラス内で上書きできます。- 定義:
compare
、クラス:Collator
- パラメータ:
source
- ソース文字列。target
- ターゲット文字列。- 戻り値:
- 整数値。 ソースがターゲットより小さければ、値はゼロより小さい。ソースがターゲットと等しければ、値はゼロ。ソースがターゲットより大きければ、値はゼロより大きい。
- 例外:
NullPointerException
-source
またはtarget
がnullの場合。- 関連項目:
CollationKey
、Collator.getCollationKey(java.lang.String)
-
getCollationKey
public CollationKey getCollationKey(String source)文字列を、CollationKey.compareToで比較できる一連の文字に変換します。 これは、java.text.Collator.getCollationKeyをオーバーライドします。 サブクラス内でオーバーライドできます。- 定義:
getCollationKey
、クラス:Collator
- パラメータ:
source
- 照合キーに変換する文字列。- 戻り値:
- Collatorの照合ルールに基づく、指定されたStringに対するCollationKey。 ソースStringがnullの場合はnullのCollationKeyが返される。
- 関連項目:
CollationKey
、Collator.compare(java.lang.String, java.lang.String)
-
clone
public Object clone()標準オーバーライドです。セマンティックスは変わりません。 -
equals
public boolean equals(Object obj)2つの照合オブジェクトが等しいかどうかを比較します。- 定義:
equals
、インタフェース:Comparator<Object>
- オーバーライド:
equals
、クラス:Collator
- パラメータ:
obj
- 比較対象のテーブル・ベースの照合オブジェクト。- 戻り値:
- 現在のテーブル・ベースの照合オブジェクトが、テーブル・ベースの照合オブジェクトobjに等しい場合はtrue、そうでない場合はfalse。
- 関連項目:
Object.hashCode()
、HashMap
-
hashCode
public int hashCode()テーブル・ベース照合オブジェクトのハッシュ・コードを生成します。- 定義:
hashCode
、クラス:Collator
- 戻り値:
- このオブジェクトのハッシュ・コード値。
- 関連項目:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-