|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.text.Collator java.text.RuleBasedCollator
public class RuleBasedCollator
RuleBasedCollator
類別是 Collator
的具體子類別,它提供了一個簡單的、資料驅動的表 collator。可以通過此類別來創建基於表的自定義 Collator
。RuleBasedCollator
將字元映射到排序鍵。
為了提高效率,對 RuleBasedCollator
做了如下限制(其他子類別可以用於更複雜的語言):
整理表由一組整理規則組成,其中每個規則是以下三種形式之一:
<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" 是有效的,因為在 "ae" 被重置之前 "a" 存在)。在後一種情況中,"ae" 不是作為單個字元進行輸入和處理的;相反,"e" 被排序,其結果類似於它被擴充為兩個字元:"a" 後跟 "e"。此差別會出現在不同的自然語言中:在傳統的西班牙語中,"ch" 被處理的結果類似於將它縮短為一個字元(表示為 "c < ch < d"),而在傳統的德語中,a-umlaut 被處理的結果類似於將它擴充為兩個字元(表示為 "a,A < b,B ...&ae;&AE;")。&ae;\u00e3&AE;\u00c3").當然,[\u00e3 和 \u00c3 是 a-umlaut 的轉義序列。]a < b & a < c a < c & a < b
可忽略的字元
對於可忽略的字元,第一個規則必須從一個關係開始(以上例子實際上是不完整的;"a < b" 實際上應該為 "< a < b")。但是,如果第一個關係不是 "<",那麼所有文本參數一直到第一個 "<" 都將被忽略。例如,", - < a < b" 將把 "-" 作為被忽略的字元,正如在前面的單詞 "black-birds" 中所看到的。在不同語言的範例中,可以看到大多數重音字元被忽略。
規範化和重音
RuleBasedCollator
自動處理其規則表,以包含重音字元的預組合和組合後的字元版本。即使提供的規則字元串僅包含基本字元和獨立的組合重音字元,比對規則字元串中所有規範字元組合的預組合重音字元也將被輸入到表中。
即使 collator 被設置為 NO_DECOMPOSITION,這也允許使用 RuleBasedCollator 來比較重音字元串。但是有兩點警告:首先,如果要整理的字元串包含不規範順序的組合序列,那麼應該把 collator 設置為 CANONICAL_DECOMPOSITION 或 FULL_DECOMPOSITION 以啟用組合序列的排序。其次,如果字元串包含相容性分解的字元(例如全角和半角形式),那麼必須使用 FULL_DECOMPOSITION,因為規則表只包括規範的映射。
錯誤
以下為錯誤:
RuleBasedCollator
將拋出 ParseException
。
以下是例子
Simple: "< 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)
根據表規則比較存儲在兩個不同字元串中的字元資料。 |
boolean |
equals(Object obj)
比較兩個 collation 物件的相等性。 |
CollationElementIterator |
getCollationElementIterator(CharacterIterator source)
返回給定 String 的 CollationElementIterator。 |
CollationElementIterator |
getCollationElementIterator(String source)
返回給定 String 的 CollationElementIterator。 |
CollationKey |
getCollationKey(String source)
將字元串轉換為能夠與 CollationKey.compareTo 進行比較的一系列字元。 |
String |
getRules()
獲取 collation 物件的基於表的規則。 |
int |
hashCode()
產生基於表的 collation 物件的雜湊碼 |
從類別 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)
CollationElementIterator
public CollationElementIterator getCollationElementIterator(CharacterIterator source)
CollationElementIterator
public int compare(String source, String target)
Collator
中的 compare
source
- 源字元串。target
- 目標字元串。
CollationKey
,
Collator.getCollationKey(java.lang.String)
public CollationKey getCollationKey(String source)
Collator
中的 getCollationKey
source
- 將要被轉換為整理鍵的字元串。
CollationKey
,
Collator.compare(java.lang.String, java.lang.String)
public Object clone()
Collator
中的 clone
Cloneable
public boolean equals(Object obj)
Comparator<Object>
中的 equals
Collator
中的 equals
obj
- 要與此物件進行比較的基於表的 collation 物件。
Object.hashCode()
,
Hashtable
public int hashCode()
Collator
中的 hashCode
Object.equals(java.lang.Object)
,
Hashtable
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。