自定义排序字符串列表(遵循Chamorro语言排序规则)

BJ *_*ruz 7 java collation internationalization

我正在尝试为太平洋岛屿语言(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
Run Code Online (Sandbox Code Playgroud)

此外Å,Ñ和它们的小写版本一样,没有其他字母的重音.单词可以包含撇号(例如o'mak),但它们不会影响排序顺序.

Chamorro没有区域设置,因此我需要手动实现排序算法.

BJ *_*ruz 4

感谢 Dirk Lachowski,我实现了一个有效的解决方案。这是我写的:

\n\n
  static final String CHAMORRO_RULES = ("< a,A < \xc3\xa5,\xc3\x85 < b,B < ch,Ch < d,D < e,E < f,F < g,G < h,H < i,I < k,K < l,L "\n      + "< m,M < n,N < \xc3\xb1,\xc3\x91 < ng,Ng < o,O < p,P < r,R < s,S < t,T < u,U < y,Y");\n  static final RuleBasedCollator CHAMORRO_COLLATOR;\n  static {\n    try {\n      CHAMORRO_COLLATOR = new RuleBasedCollator(CHAMORRO_RULES);\n    }\n    catch (ParseException pe) {\n      throw new RuntimeException(pe);\n    }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我实现了上面基于规则的整理器之后,我简单地编写了以下排序方法:

\n\n
  static void sort(List<String> words) {\n    Collections.sort(words, new Comparator<String>() {\n\n      @Override\n      public int compare(String lhs, String rhs) {\n        return Constants.CHAMORRO_COLLATOR.compare(lhs, rhs);\n      }\n\n    });\n  }\n
Run Code Online (Sandbox Code Playgroud)\n