我正在尝试为太平洋岛屿语言(Chamorro)排序字符串列表。在这种语言中,Ng
被视为一个字母,它位于字母表中的N
之后。如何对单词列表进行排序,使得Nai
和Nunu
都出现在以Ng
开头的单词之前?
更新
完整的字母表是:
A, Å, B, Ch, D, E, F, G, H, I, K, L, M, N, Ñ, Ng, O, P, R, S, T, U, Y
除Å
,Ñ
及其小写版本外,其他字母上没有重音符号。单词可以包含撇号(例如o'mak
),但它们不会影响排序顺序。
Chamorro没有区域设置,因此我需要手动实施排序算法。
答案 0 :(得分:4)
感谢Dirk Lachowski,我实施了一个有效的解决方案。这是我写的:
static final String CHAMORRO_RULES = ("< a,A < å,Å < b,B < ch,Ch < d,D < e,E < f,F < g,G < h,H < i,I < k,K < l,L "
+ "< m,M < n,N < ñ,Ñ < ng,Ng < o,O < p,P < r,R < s,S < t,T < u,U < y,Y");
static final RuleBasedCollator CHAMORRO_COLLATOR;
static {
try {
CHAMORRO_COLLATOR = new RuleBasedCollator(CHAMORRO_RULES);
}
catch (ParseException pe) {
throw new RuntimeException(pe);
}
}
在我实现上面基于规则的collator后,我只是编写了以下排序方法:
static void sort(List<String> words) {
Collections.sort(words, new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return Constants.CHAMORRO_COLLATOR.compare(lhs, rhs);
}
});
}