JavaTM 2 Platform
Standard Ed. 6

java.text
類別 RuleBasedCollator

java.lang.Object
  繼承者 java.text.Collator
      繼承者 java.text.RuleBasedCollator
所有已實作的介面:
Cloneable, Comparator<Object>

public class RuleBasedCollator
extends Collator

RuleBasedCollator 類別是 Collator 的具體子類別,它提供了一個簡單的、資料驅動的表 collator。可以通過此類別來創建基於表的自定義 CollatorRuleBasedCollator 將字元映射到排序鍵。

為了提高效率,對 RuleBasedCollator 做了如下限制(其他子類別可以用於更複雜的語言):

  1. 如果指定了由 <modifier> 控制的特殊整理規則,則它將用於整個 collator 物件。
  2. 所有未指定的字元位於整理順序的末尾。

整理表由一組整理規則組成,其中每個規則是以下三種形式之一:

    <modifier>
    <relation> <text-argument>
    <reset> <text-argument>
 
規則元素的定義如下:

實際的操作要比看起來簡單。例如,以下表達是等效的:

 a < b < c
 a < b & b < c
 a < c & a < b
 
注意,順序很重要,因為後續項直接跟在文本參數的後面。以下是不等效的:
 a < b & a < 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 < 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
 

建構子詳細資訊

RuleBasedCollator

public RuleBasedCollator(String rules)
                  throws ParseException
RuleBasedCollator 建構子。它採用表規則並產生一個整理表。有關整理規則語法的更多資訊,請參閱 RuleBasedCollator 類別描述。

參數:
rules - 用來產生整理表的整理規則。
拋出:
ParseException - 如果規則的產生進程失敗,則拋出一個格式異常。例如,產生規則 "a < ?< d" 將導致建構子拋出 ParseException,因為 '?' 沒有使用引號。
另請參見:
Locale
方法詳細資訊

getRules

public String getRules()
獲取 collation 物件的基於表的規則。

返回:
創建表 collation 物件的整理規則。

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(String source)
返回給定 String 的 CollationElementIterator。

另請參見:
CollationElementIterator

getCollationElementIterator

public CollationElementIterator getCollationElementIterator(CharacterIterator source)
返回給定 String 的 CollationElementIterator。

從以下版本開始:
1.2
另請參見:
CollationElementIterator

compare

public int compare(String source,
                   String target)
根據表規則比較存儲在兩個不同字元串中的字元資料。返回關於一個字元串小於、大於等於另一個字元串的資訊。在子類別中這可以被覆寫。

指定者:
類別 Collator 中的 compare
參數:
source - 源字元串。
target - 目標字元串。
返回:
返回一個整數值。如果源小於目標,則該值小於零;如果源等於目標,則該值為零;如果源大於目標,則該值大於零。
另請參見:
CollationKey, Collator.getCollationKey(java.lang.String)

getCollationKey

public CollationKey getCollationKey(String source)
將字元串轉換為能夠與 CollationKey.compareTo 進行比較的一系列字元。這將覆寫 java.text.Collator.getCollationKey。在子類別中它可以被覆寫。

指定者:
類別 Collator 中的 getCollationKey
參數:
source - 將要被轉換為整理鍵的字元串。
返回:
根據此 Collator 的整理規則為給定 String 創建的 CollationKey。如果源 String 為 null,則返回一個 null CollationKey。
另請參見:
CollationKey, Collator.compare(java.lang.String, java.lang.String)

clone

public Object clone()
標準覆寫,無語義變化。

覆寫:
類別 Collator 中的 clone
返回:
此實例的一個副本。
另請參見:
Cloneable

equals

public boolean equals(Object obj)
比較兩個 collation 物件的相等性。

指定者:
介面 Comparator<Object> 中的 equals
覆寫:
類別 Collator 中的 equals
參數:
obj - 要與此物件進行比較的基於表的 collation 物件。
返回:
如果當前的基於表的 collation 物件與基於表的 collation 物件 obj 相同,則返回 true;否則返回 false。
另請參見:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
產生基於表的 collation 物件的雜湊碼

指定者:
類別 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