|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Object
|
+--java.text.Collator
|
+--java.text.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" (a ウムラウト) は、2 つの文字に拡張されたかのように処理されます ("a,A < b,B ... & ae,a & AE,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 を使う必要があるということです。詳細は、「The Unicode Standard, Version 2.0」を参照してください。
エラー
次の場合は、エラーになります。
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 < å=a?,Å=A? ;aa,AA< æ,Æ< ø,Ø"
通常、ルールベースの 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" +
"< å=a?,Å=A?" +
";aa,AA< æ,Æ< ø,Ø";
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
もう 1 つの例では、既存のテーブルを変更して新しい 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 = "=?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ ";?;?;?;?" // main accents
+ "< a , A ; ae, AE ; æ , Æ"
+ "< b , B < c, C < e, E & C < d, D";
// change the order of accent characters
String addOn = "& ? ; ? ; ?";
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 = "& ? <?, ? <?, ?";
RuleBasedCollator myJapaneseCollator = new
RuleBasedCollator(en_USCollator.getRules() + jaString);
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 - 照合テーブルを構築する元になる照合ルール| メソッドの詳細 |
public String getRules()
public CollationElementIterator getCollationElementIterator(String source)
CollationElementIteratorpublic CollationElementIterator getCollationElementIterator(CharacterIterator source)
CollationElementIterator
public int compare(String source,
String target)
public CollationKey getCollationKey(String source)
public Object clone()
public boolean equals(Object obj)
obj - 比較対象のテーブルベースの照合オブジェクトpublic int hashCode()
|
Java プラットフォーム 1.2 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||