|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjava.text.Collator
java.text.RuleBasedCollator
public class RuleBasedCollator
RuleBasedCollator クラスは Collator の具象サブクラスで、簡単な操作でデータドリブンのテーブルコレータを使用可能にします。このクラスを使うと、カスタマイズしたテーブルベースの Collator を作成することができます。RuleBasedCollator は、文字をソートキーにマップします。
効率化のために、RuleBasedCollator には次の制約があります (さらに複雑な言語には他のサブクラスが使用される)。
照合テーブルは照合ルールのリストからなり、それぞれのルールは次の 3 つの形式のどれかをとります。
<修飾子>
<関係文字> <テキスト引数>
<リセット文字> <テキスト引数>
ルール要素の定義は次のとおりです。
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 < \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 |
| コンストラクタの詳細 |
|---|
public RuleBasedCollator(String rules)
throws ParseException
rules - 照合テーブルを構築する元になる照合ルール
ParseException - ルールの構築プロセスが失敗すると、
フォーマット例外がスローされる。たとえば、
構築ルールの「a < ? < d」は「?」が引用符で囲まれていないので、
コンストラクタにより ParseException がスローされるLocale| メソッドの詳細 |
|---|
public String getRules()
public CollationElementIterator getCollationElementIterator(String source)
CollationElementIteratorpublic CollationElementIterator getCollationElementIterator(CharacterIterator source)
CollationElementIterator
public int compare(String source,
String target)
Collator 内の comparesource - ソース文字列target - ターゲット文字列
CollationKey,
Collator.getCollationKey(java.lang.String)public CollationKey getCollationKey(String source)
Collator 内の getCollationKeysource - 照合キーに変換する文字列
CollationKey,
Collator.compare(java.lang.String, java.lang.String)public Object clone()
Collator 内の cloneCloneablepublic boolean equals(Object obj)
Comparator<Object> 内の equalsCollator 内の equalsobj - 比較対象のテーブルベースの照合オブジェクト
Object.hashCode(),
Hashtablepublic int hashCode()
Collator 内の hashCodeObject.equals(java.lang.Object),
Hashtable
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。