【问题标题】:Custom sorting list of strings (following Chamorro language collation rules)字符串的自定义排序列表(遵循查莫罗语排序规则)
【发布时间】:2014-07-15 23:00:50
【问题描述】:

我正在尝试对太平洋岛屿语言(查莫罗语)的字符串列表进行排序。在这种语言中,Ng 被视为一个字母,在字母表中位于 N 之后。如何对单词列表进行排序,使 NaiNunu 都出现在以 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 没有语言环境,所以我需要手动实现一个排序算法。

【问题讨论】:

  • 该语言是否有区域设置?
  • 不,不存在语言环境。
  • 你有一套完整的规则吗?也许还有一些示例词?
  • 自定义排序规则可能会有所帮助。看看这个帖子:tutorials.jenkov.com/java-internationalization/collator.html
  • @DirkLachowski 已经回答 整理和排序

标签: java internationalization collation


【解决方案1】:

感谢 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);
    }
  }

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

  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);
      }

    });
  }

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 2013-09-26
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多