【问题标题】:Linguistic sorting (German) with Java使用 Java 进行语言排序(德语)
【发布时间】:2012-09-28 12:48:17
【问题描述】:

从一种语言到另一种语言,用数字对字符串进行排序是不同的。例如,在升序排序中,英文数字排在字母之前。但是,在德语中,数字在字母之后按升序排列。

我尝试使用Collator 对字符串进行排序,如下所示:

private Collator collator = Collator.getInstance(Locale.GERMANY);
collator.compare(str1, str2)

但上面的比较没有考虑字母规则后的数字。

有没有人知道为什么 Java 暂时不考虑这条规则(字母后的数字)我正在使用 RuleBasedCollator,如下所示:

private final String sortOrder = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I < j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R < s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z < 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9";

private Collator collator = new RuleBasedCollator(sortOrder);

【问题讨论】:

  • 您的排序顺序中没有元音变音和夏普 (äöüß) 是故意的吗?我想说它们对于拥有德国整理者很重要。
  • 是的,对于测试用例,我省略了变音符号和特殊字符。只是想保持简单。
  • 另外:您遵循哪些规则将数字排在其他字符之后?德语有几种不同的排序规则,至少其中一些排序数字在前。
  • 我刚刚尝试了 Locale.GERMANY 排序规则,你能指出一个排序规则,它可以在字母之后对数字进行排序吗?
  • 但是,在德语中,数字在字母之后按升序排列。”

标签: java sorting locale collation


【解决方案1】:

您可以检查/调试源代码以查看为什么没有任何变化:

Collator.getInstance(Locale.GERMANY);

调用以下代码:

public static synchronized
Collator getInstance(Locale desiredLocale)
{
    // Snipping some code here
    String colString = "";
    try {
        ResourceBundle resource = LocaleData.getCollationData(desiredLocale);

        colString = resource.getString("Rule");
    } catch (MissingResourceException e) {
        // Use default values
    }
    try
    {
        result = new RuleBasedCollator( CollationRules.DEFAULTRULES +
                                        colString,
                                        CANONICAL_DECOMPOSITION );
    }
// Snipping some more code here

在这里,您可以看到特定规则(colString 在您的情况下无论如何都是空的)放置在默认值(CollationRules.DEFAULTRULES)之后

正如您发现的那样,默认值将数字放在首位:

  // NUMERICS

    + "<0<1<2<3<4<5<6<7<8<9"
    + "<\u00bc<\u00bd<\u00be"   // 1/4,1/2,3/4 fractions

    // NON-IGNORABLES
    + "<a,A"
    + "<b,B"
    + "<c,C"
    + "<d,D"

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多