public class RuleBasedCollator extends Collator
RuleBasedCollator
クラスは Collator
の具象サブクラスで、簡単な操作でデータドリブンのテーブルコレータを使用可能にします。このクラスを使うと、カスタマイズしたテーブルベースの Collator
を作成することができます。
RuleBasedCollator
は、文字をソートキーにマップします。
効率化のために、RuleBasedCollator
には次の制約があります (さらに複雑な言語にはほかのサブクラスが使用される)。
照合テーブルは照合ルールのリストからなり、それぞれのルールは次の 3 つの形式のどれかをとります。
<modifier> <relation> <text-argument> <reset> <text-argument>ルール要素の定義は次のとおりです。
b c
は bc
として処理されます。
'@' : アクセントがフランス語のように逆方向にソートされることを示します。
'&' : 次のルールが、リセットテキスト引数がソートされる位置に続くことを示します。
これは実際よりも複雑に感じられます。たとえば次の例は、同じことを同等の方法で表したものです。
テキスト引数のすぐ後に次の項目がくるので、順序が重要です。次の例は、同等ではありません。a < b < c a < b & b < 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 < 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 を使う必要があるということです。
エラー
次の場合は、エラーになります。
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);
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()
テーブルベース照合オブジェクトのハッシュコードを生成します。
|
compare, equals, getAvailableLocales, getDecomposition, getInstance, getInstance, getStrength, setDecomposition, setStrength
public RuleBasedCollator(String rules) throws ParseException
rules
- 照合テーブルを構築する元になる照合ルール。ParseException
- ルールの構築プロセスが失敗すると、フォーマット例外がスローされる。たとえば、構築ルールの「a < ? < d」は「?」が引用符で囲まれていないので、コンストラクタにより ParseException がスローされる。Locale
public String getRules()
public CollationElementIterator getCollationElementIterator(String source)
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
CollationElementIterator
public int compare(String source, String target)
compare
、クラス: Collator
source
- ソース文字列。target
- ターゲット文字列。NullPointerException
- source
または target
が null の場合。CollationKey
、Collator.getCollationKey(java.lang.String)
public CollationKey getCollationKey(String source)
getCollationKey
、クラス: Collator
source
- 照合キーに変換する文字列。CollationKey
、Collator.compare(java.lang.String, java.lang.String)
public Object clone()
public boolean equals(Object obj)
equals
、インタフェース: Comparator<Object>
equals
、クラス: Collator
obj
- 比較対象のテーブルベースの照合オブジェクト。Object.hashCode()
、HashMap
public int hashCode()
hashCode
、クラス: Collator
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.