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」)に拡張されたかのようにソートされます。この違いは、自然言語に見られます。 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を使う必要があるということです。
エラー
次の場合は、エラーになります。
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)
指定されたCharacterIteratorの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)
source
- 照合される文字列CollationElementIterator
オブジェクトCollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
source
- 照合される文字イテレータCollationElementIterator
オブジェクト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, 2014, Oracle and/or its affiliates. All rights reserved.