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