Collator 用來簡化我們處理各種語言之間的差別性。Collator 主要處理:
通過比較字串 Unicode 位元組的 code point 來進行Java字串的比較。這將意味著在Unicode代碼圖表字元位置指定的排序權重,但事實並非如此。語言可能有完全相同的字元而不同的排序權重。
例如,你完全不懂德語,你可能希望 ß (\u00DF) 被當作 b 或者 B 來進行排序,但事實上是 ss,在該語言中 ß 的排序值高於正常的 s。
而多層次的比較指的是提供4種比較層級:基底字元、口音、case、標點符號。
需要注意的是 Collator 不支援標點符號。
來看看一些具體的關於多層次比較例子的代碼:
System.out.println("a equals b -> " + (collator.compare("a", "b")==0 ? "true":"false"));System.out.println("a equals à -> " + (collator.compare("a", "à")==0 ? "true":"false"));System.out.println("A equals a -> " + (collator.compare("a", "A")==0 ? "true":"false"));
當 collator.setStrength(Collator.PRIMARY):
a equals b -> false
a equals à -> true
A equals a -> true
當 collator.setStrength(Collator.SECONDARY):
a equals b -> false
a equals à -> false
A equals a -> true
當 collator.setStrength(Collator.TERTIARY):
a equals b -> false
a equals à -> false
A equals a -> false
還有下面這段代碼,儘管第一行輸出的是 false ,但是他們看起來確實完全相同的字串:
collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);String single = "abgaskr\u00FCmmerdichtung";String combined = "abgaskr\u0075\u0308mmerdichtung";System.out.println("Single equals combined? " + (collator.compare(single, combined) == 0 ? "true": "false"));
等等,種子 Collator 類理解起來挺費勁,但當你需要處理各種不同語言時,你還真離不開它。
你可以從這裡查看
Collator 類的 JavaDoc 文檔。