套件 | flash.globalization |
類別 | public final class Collator |
繼承 | Collator Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
此類別使用作業系統提供的字串比較服務。比較結果會根據建立類別實體時所提供的地區設定識別名稱而有所不同。ActionScript 會使用 Unicode 字元集儲存字串。Boolean 字串比較運算子 (==、!=、<、<=、>、>=) 使用 Unicode 字碼指標進行比較。在大多數情況下,結果的排序順序不一定會符合特定語言和區域的慣例,因此請勿用來排序會顯示在使用者介面上的字串。相較之下,此類別中的方法提供的順序,會與這些慣例相同。
以下是排序順序根據語言而異的範例:
- 在英文中,小寫 a 在大寫 A 前面,大寫 A 在小寫 b 前面。
- 在瑞典文中,ö 在 z 後面,而在德文中,ö 在 o 後面
- 在傳統西班牙文中,ch 會視為一個字元,排在 c 和 d 之間
根據用途,相同語言與區域間的排序順序亦可能有所不同。例如,在德文中,電話簿中名字的排序順序與字典中單字的排序方式不同。在中文和日文中,有不同方式可用來排序表意字元:根據發音或根據部首,以及文字中使用的筆劃數目。在西班牙文和喬治亞文中,現代排序和傳統排序有所不同。
在此類別中的比較方法提供兩種主要使用模式。Collator()
建構函式的 initialMode
參數可控制這些模式。預設「排序」模式用來排序要對使用者顯示的項目。此模式中會進行較嚴格的比較,以確保各項目以相同方式排序時均能保持一致。例如,大寫字母與小寫字母的比較結果為不相等。在「比對」模式中,會進行較不嚴格的比較。例如,此模式中會將大寫與小寫字母視為相同。此範例示範這兩種模式:
var sortingCollator:Collator = new Collator("en-US", CollatorMode.SORTING); var words:Array = new Array("Airplane" , "airplane", "boat", "Boat"); words.sort(sortingCollator.compare); trace(words); var matchingCollator:Collator = new Collator("en-US", CollatorMode.MATCHING); if (matchingCollator.equals("Car", "car")) { trace("The words match!"); }
即使如上將地區設定 ID 參數提供給建構函式,定序方式也會根據使用者作業系統設定,和不支援所要求地區設定時是否使用後援地區設定,而有所不同。
屬性 | 定義自 | ||
---|---|---|---|
actualLocaleIDName : String [唯讀]
此 Collator 物件所使用的實際地區設定 ID 名稱。 | Collator | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
ignoreCase : Boolean
若此屬性設為 true,表示若字串間只有字母大小寫不同,會視為相同。 | Collator | ||
ignoreCharacterWidth : Boolean
若此屬性為 true,會將某些中文和日文的全形和半形字元視為相同。 | Collator | ||
ignoreDiacritics : Boolean
若此屬性設為 true,使用相同基礎字元但重音不同或區別發音符號不同者,會視為相同。 | Collator | ||
ignoreKanaType : Boolean
將此屬性設為 true 時,若字串間的差異只因為所用假名字元的類型不同,則會將字串視為相同。 | Collator | ||
ignoreSymbols : Boolean
若此屬性設為 true,會在排序或比對時忽略空白、貨幣符號、數學符號和其他類型的符號。 | Collator | ||
lastOperationStatus : String [唯讀]
此 Collator 物件執行的最近作業狀態。 | Collator | ||
numericComparison : Boolean
控制字串比較過程中,如何處理內嵌於字串中的數值。 | Collator | ||
requestedLocaleIDName : String [唯讀]
傳送到此 Collator 物件建構函式的所要求地區設定 ID 名稱。 | Collator |
方法 | 定義自 | ||
---|---|---|---|
建構新 Collator 物件,以根據特定地區設定的慣例,提供字串比較。 | Collator | ||
比較兩個字串並傳回整數值,表示第一個字串小於、等於或大於第二個字串。 | Collator | ||
比較兩字串並傳回 Boolean 值,表示字串是否相同。 | Collator | ||
[靜態]
列出此類別支援的所有地區設定 ID 名稱。 | Collator | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
actualLocaleIDName | 屬性 |
actualLocaleIDName:String
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
此 Collator 物件所使用的實際地區設定 ID 名稱。
根據作業系統與 requestedLocaleIDName
參數傳送到 Collator()
建構函式的值,此值有三種可能性。
- 若要求的地區設定不是
LocaleID.DEFAULT
,而且作業系統支援要求的地區設定,則傳回的名稱會與requestedLocaleIDName
屬性相同。 - 若使用
LocaleID.DEFAULT
當作建構函式requestedLocaleIDName
參數的值,則會使用使用者作業系統指定的目前地區設定名稱。LocaleID.DEFAULT
值會將使用者的自訂設定保留於作業系統中。即使兩個地區設定 ID 名稱是相同的,傳送明確的值作為requestedLocaleIDName
參數所得的結果,也未必與使用LocaleID.DEFAULT
相同。使用者可能在自己的電腦上已有自訂的地區設定,若要求明確的地區設定 ID 名稱而不是使用LocaleID.DEFAULT
的話,您的應用程式不會擷取這些自訂設定。 - 若系統不支援建構函式所指定的
requestedLocaleIDName
,則會提供後援地區設定 ID 名稱。
實作
public function get actualLocaleIDName():String
相關 API 元素
ignoreCase | 屬性 |
ignoreCase:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
若此屬性設為 true,表示若字串間只有字母大小寫不同,會視為相同。例如,若 ignoreCase
屬性設為 true
,compare("ABC", "abc")
會傳回 true
。
字串的大小寫轉換會遵循所指定的地區設定規則。
若 ignoreCase
屬性為 false,則會將大小寫字元視為不同。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
當 Collator()
建構函式的 initialMode
參數設定為 Collator.MATCHING
時,預設值為 true
。當 Collator()
建構函式的 initialMode
參數設定為 Collator.SORTING
時,預設值為 false
。
實作
public function get ignoreCase():Boolean
public function set ignoreCase(value:Boolean):void
相關 API 元素
ignoreCharacterWidth | 屬性 |
ignoreCharacterWidth:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
若此屬性為 true,會將某些中文和日文的全形和半形字元視為相同。
為與目前中文和日文字元集標準相容,Unicode 對一些字元提供了全形與半形字元代碼。例如,若 ignoreCharacterWidth
屬性設為 true
,compare("Aア", "Aア")
會傳回 true
。
若 ignoreCharacterWidth
屬性設為 false
,則會將全形與半形字元視為不同。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
預設值為 false。
實作
public function get ignoreCharacterWidth():Boolean
public function set ignoreCharacterWidth(value:Boolean):void
相關 API 元素
ignoreDiacritics | 屬性 |
ignoreDiacritics:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
若此屬性設為 true,使用相同基礎字元但重音不同或區別發音符號不同者,會視為相同。例如,若 ignoreDiacritics
屬性設為 true
,compare("coté", "côte")
會傳回 true
。
若 ignoreDiacritics
設為 false
,會將具有不同區別發音符號或重音的基礎字元視為不同。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
預設值為 false。
實作
public function get ignoreDiacritics():Boolean
public function set ignoreDiacritics(value:Boolean):void
相關 API 元素
ignoreKanaType | 屬性 |
ignoreKanaType:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
將此屬性設為 true 時,若字串間的差異只因為所用假名字元的類型不同,則會將字串視為相同。例如,ignoreKanaType
屬性設為 true
時,compare("カナ", "かな")
會傳回 true
。
若將 ignoreKanaType
設為 false
,表示會將相同音節的平假名和片假名字元會視為不同。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
預設值為 false。
實作
public function get ignoreKanaType():Boolean
public function set ignoreKanaType(value:Boolean):void
相關 API 元素
ignoreSymbols | 屬性 |
ignoreSymbols:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
若此屬性設為 true,會在排序或比對時忽略空白、貨幣符號、數學符號和其他類型的符號。例如,若 ignoreSymbols
屬性設為 true
,「Obrian」、「O'Brian」和「O Brian」都會被視為相同。
若 ignoreSymbols
屬性為 false,則比較字串時會考量符號字元。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
預設值為 false。
實作
public function get ignoreSymbols():Boolean
public function set ignoreSymbols(value:Boolean):void
相關 API 元素
lastOperationStatus | 屬性 |
numericComparison | 屬性 |
numericComparison:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
控制字串比較過程中,如何處理內嵌於字串中的數值。
若 numericComparison
屬性設為 true
,比較方法會將字串中出現的數字轉換為數值以進行比較。
若此屬性設為 false
,比較時會將數字視為字元代碼,並根據特定地區設定中的字元排序規則進行比較。
例如,若地區設定 "en-US" 的此屬性設為 true,則 "version1"、 "version10" 和 "version2" 會以下列順序排序:version1 < version2 < version10。
若地區設定 "en-US" 的此屬性設為 false,這些相同字串會以下列順序排序:version1 < version10 < version2。
若將某值指派給此屬性,而且沒有錯誤或警告,則 lastOperationStatus
屬性會被設為:
-
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
預設值為 false。
實作
public function get numericComparison():Boolean
public function set numericComparison(value:Boolean):void
相關 API 元素
requestedLocaleIDName | 屬性 |
requestedLocaleIDName:String
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
傳送到此 Collator 物件建構函式的所要求地區設定 ID 名稱。
若使用 LocaleID.DEFAULT
值,則傳回的名稱會是 "i-default"。若採用後援地區設定,則所用的實際地區設定可能與要求的地區設定不同。您可以使用 actualLocaleIDName
屬性擷取實際地區設定名稱。
實作
public function get requestedLocaleIDName():String
相關 API 元素
Collator | () | 建構函式 |
public function Collator(requestedLocaleIDName:String, initialMode:String = "sorting")
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
建構新 Collator 物件,以根據特定地區設定的慣例,提供字串比較。
若目前的作業系統不支援傳送到 requestedLocaleIDName
參數的地區設定 ID,則會決定後援地區設定。若使用後援,則會設定 lastOperationStatus
屬性,以指示後援類型。
initialMode
參數設定多種定序選項,供一般用途之用。可設為下列值之一:
CollatorMode.SORTING
:設定一般語言排序用途的定序選項,如排序要對使用者顯示的文字字串清單。在此模式中,比較字串時會區分大小寫字母、重音字元,和其他地區設定特有的差異。CollatorMode.MATCHING
:設定一般用途的定序選項,如判斷兩個字串是否相等。在此模式中,比較字串時會忽略大小寫字母、重音字元等差異。
以下範例是使用 Collator 與地區設定 ID「en-US」(美國英文) 和 CollatorMode.SORTING
選項建立的排序清單:
如上所示,所有字元會被視為具有不同值,但使用語言上的順序。
以下範例是使用 Collator 與地區設定 ID「en-US」(美國英文) 和 CollatorMode.MATCHING
選項建立的排序清單:
如上所示,有些字元可能依語言上的順序排列,並視為具有相同的字元值。
若要更精準地控制排序順序,可變更 collator 屬性,如 Collator.ignoreCase
或 Collator.ignoreDiacritics
。
如需參考資料,請見下列使用標準 Array.sort()
的對應排序範例,此方式不區分地區設定:
如您所見,僅會根據 Unicode 數值順序排序所有字元。這在語言上並沒有太大意義。
若要使用使用者目前作業系統的偏好設定進行格式化,請將 requestedLocaleIDName
參數中的 LocaleID.DEFAULT
靜態值傳送到建構函式。
有些地區設定具有多種不同的排序順序變體。例如,在德文中,電話簿使用一種排序順序,而字典則使用另一種排序。在中文字裡,通常支援將字元音譯為拼音進行排序。您可以在以 requestedLocaleIDName
參數傳送至建構函式的字串中包含「collation」關鍵字,選用不同的排序順序。
var germanPhonebook:LocaleID = new LocaleID("de-DE@collation=phonebook"); var chinesePinyin:LocaleID = new LocaleID("zh-Hant@collation=pinyin");
此定序字串的可能值如下,括弧中顯示受影響的語言:
若主機平台不支援要求的定序類型,會使用後援,且會設定 lastOperationStatus
屬性,以指示已選取後援類型。您可以使用 actualLocaleIDName
屬性來判斷被當做後援使用的值,如以下範例所示:
var collator:Collator = new Collator("fr-FR"); if (collator.lastOperationStatus == LastOperationStatus.USING_FALLBACK_WARNING) { trace ("Using fallback locale: " + collator.actualLocaleIDName); }
若建構函式成功完成,lastOperationStatus
屬性就會被設為:
-
LastOperationStatus.NO_ERROR
若要求的地區設定 ID 無法使用,則 lastOperationStatus
屬性會被設為下列之一:
LastOperationStatus.USING_FALLBACK_WARNING
LastOperationStatus.USING_DEFAULT_WARNING
否則,lastOperationStatus
屬性會被設為 LastOperationStatus 類別中定義的常數之一。
如需有關上方列出的警告以及 lastOperationStatus
的其他可能值的詳細資訊,請參閱 LastOperationStatus
類別的說明。
requestedLocaleIDName:String — 此 Collator 物件要使用的 String 。
| |
initialMode:String (default = "sorting ") — 指定最初定序模式的字串值。預設值為 CollatorMode.SORTING 。請參閱 CollatorMode 類別,以取得可用模式清單。
|
擲回值
TypeError — 當 requestedLocaleIDName 參數為 null 。
| |
ArgumentError — 當 requestedLocaleIDName 參數包含無效的值時。
|
相關 API 元素
compare | () | 方法 |
public function compare(string1:String, string2:String):int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
比較兩個字串並傳回整數值,表示第一個字串小於、等於或大於第二個字串。會使用 Collator()
建構函式中指定的地區設定 ID 的排序規則進行比較。
當此方法被呼叫並成功完成時,lastOperationStatus
屬性會被設為:
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus
類別中定義的常數之一。
參數
string1:String — 第一個比較字串。
| |
string2:String — 第二個比較字串。
|
int — 表示第一個字串小於、等於或大於第二個字串的整數值。
|
擲回值
TypeError — 當必要的參數為 null 值。
| |
ArgumentError — 當參數包含無效的值時。
|
相關 API 元素
equals | () | 方法 |
public function equals(string1:String, string2:String):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
比較兩字串並傳回 Boolean 值,表示字串是否相同。會使用 Collator()
建構函式中指定的地區設定 ID 的排序規則進行比較。
當此方法被呼叫並成功完成時,lastOperationStatus
屬性會被設為:
LastOperationStatus.NO_ERROR
否則,lastOperationStatus
屬性會被設為 LastOperationStatus
類別中定義的常數之一。
參數
string1:String — 第一個比較字串。
| |
string2:String — 第二個比較字串。
|
Boolean — 表示字串相同 (true ) 或不同 (false ) 的 Boolean 值。
|
擲回值
TypeError — 當必要的參數為 null 值。
| |
ArgumentError — 當參數包含無效的值時。
|
相關 API 元素
getAvailableLocaleIDNames | () | 方法 |
- 重複排列各個地區設定 ID 名稱,包括作業系統的預設地區設定 ID (由
LocaleID.DEFAULT
指定) - 使用「排序」模式 (預設值) 為每一個地區設定 ID 名稱建立一個 Collator 物件。
- 顯示要求的與實際的地區設定 ID 名稱以及
lastOperationStatus
屬性的值,藉此瞭解是否使用後援地區設定。 - 使用每一個 collator 來排序資料陣列,並顯示結果。每個地區設定所產生的順序會不相同。
package { import flash.globalization.Collator; import flash.globalization.LocaleID; public class CollatorExample1 { public var col:Collator; public function CollatorExample1():void { var localeNames:Array = [LocaleID.DEFAULT, "de-DE", "sv-SE", "fr-FR", "lt-LT", "es-ES"]; var testSortData:Array = [ "y ", "i ", "k ", // Latvian "acxa ", "acha ", "adxa ", // es_traditional "n ", "ö ", "o ", "z ", "vu ", "wo ", // sw "däd ", "daed ", // de "öf ", "of ", // de_dictionary "côte ", "coté " // fr ]; for each (var localeName:String in localeNames) { col = new Collator(localeName); trace("LocaleID requested: " + col.requestedLocaleIDName + "; actual: " + col.actualLocaleIDName); trace("Last Operation Status: " + col.lastOperationStatus ); var result:Array = testSortData.sort(col.compare); trace ("sorted data: " + result); } } } }
- 使用「相符」模式,為使用者的預設地區設定建立一個 Collator 物件。
- 另一種方法是將
Collator.ignoreDiacritics
屬性設定成false
和true
- 比較一組包含讀音符號以及大小寫字元的字串。
- 顯示當
Collator.ignoreDiacritics
和Collator.ignoreCase
屬性變更後,比較方式會如何變更。
package { import flash.display.Sprite; import flash.globalization.Collator; import flash.globalization.CollatorMode; import flash.globalization.LocaleID; public class CollatorExample2 extends Sprite { public var col:Collator; public var testMatchData:Array = ["cote", "Cote", "côte", "coté"]; public var wordToMatch:String = "Cote"; public function CollatorExample2() { col = new Collator( LocaleID.DEFAULT, CollatorMode.MATCHING ); trace("LocaleID requested: " + col.requestedLocaleIDName + "; actual: " + col.actualLocaleIDName); trace("Last Operation Status: " + col.lastOperationStatus ); trace('\n' + "ignoreCase = " + col.ignoreCase); trace("ignoreDiacritics = " + col.ignoreDiacritics); compareString(testMatchData, wordToMatch) // All variations of the word cote match col.ignoreDiacritics = false; trace('\n' + "ignoreDiacritics = false"); compareString(testMatchData, wordToMatch) // Variations with different diacritics will not match col.ignoreCase = false; trace('\n' + "ignoreCase = false"); compareString(testMatchData, wordToMatch) // Variations with different case will not match } private function compareString(stringArray:Array, keyword:String):void { for each(var s:String in stringArray) { if(col.equals(s, keyword)) { trace(keyword + " = " + s); } } } } }
Tue Jun 12 2018, 03:47 PM Z