strings java sorting locale collation

strings - Clasificación lingüística(alemán) con Java



compare strings order (1)

Puede verificar / depurar el código fuente para ver por qué no cambia nada:

Collator.getInstance(Locale.GERMANY);

Llama al siguiente código de pieza:

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

Aquí puede ver que las reglas específicas ( colString que están vacías en su caso de todos modos) se colocan después de los valores predeterminados (Reglas de colString ).

Y como ha descubierto que los valores predeterminados tienen los números colocados primero:

// 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"

La clasificación de una cadena con un número se hace de manera diferente de un idioma a otro. Por ejemplo, en inglés, los dígitos vienen antes de las letras en una clasificación ascendente. Pero, en alemán, los dígitos son ascendentes ordenados según las letras.

Intenté ordenar cadenas usando un Collator siguiente manera:

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

Pero la comparación anterior no tiene en cuenta los dígitos después de la regla de las letras.

¿Alguien tiene una idea de por qué Java no tiene en cuenta esta regla (dígitos después de la letra) por el momento? Estoy usando RuleBasedCollator siguiente manera:

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