c# java culture

c# - Java equivalente de la cultura invariante



culture (2)

Estoy convirtiendo el siguiente código de C # a Java. ¿Existe un equivalente en Java al concepto .NET de Cultura Invariante?

string upper = myString.ToUpperInvariant();

Dado que la Cultura Invariante es realmente solo la cultura de los Estados Unidos, podría hacer algo como esto en Java, pero me pregunto si hay una mejor manera:

String upper = myString.toUpperCase(Locale.US);


Actualización: Java 6 introdujo Locale.ROOT que se describe como:

Esto se considera como la configuración regional base de todas las configuraciones regionales y se utiliza como la configuración regional neutral de idioma / país para las operaciones sensibles a la configuración regional.

Probablemente sea mejor que usar los EE. UU., Pero no lo he comprobado con el código a continuación.

No, ese es básicamente el camino correcto. Si bien hay diferencias entre la cultura de los EE. UU. Y la invariable en cuanto al formato, no creo que afecten las reglas de la carcasa.

EDITAR: En realidad, un programa de prueba rápida muestra que hay caracteres que están en mayúsculas de manera diferente en .NET en la cultura de los Estados Unidos que en la cultura invariante:

using System; using System.Globalization; class Test { static void Main() { CultureInfo us = new CultureInfo("en-US"); for (int i = 0; i < 65536; i++) { char c = (char) i; string s = c.ToString(); if (s.ToUpperInvariant() != s.ToUpper(us)) { Console.WriteLine(i.ToString("x4")); } } } }

Salida:

00b5 0131 017f 01c5 01c8 01cb 01f2 0345 0390 03b0 03c2 03d0 03d1 03d5 03d6 03f0 03f1 03f5 1e9b 1fbe

No tengo tiempo para mirar esto ahora, pero vale la pena investigar. No sé si las mismas diferencias se aplicarían en Java: probablemente desee tomar una muestra de ellas y averiguar qué desea que haga su código.

EDITAR: Y solo para ser un completista, vale la pena mencionar que eso solo comprueba los caracteres individuales ... mientras que en realidad es superior a cadenas enteras, lo que puede hacer una diferencia.

En cuanto al código Java para mayúsculas, parece que solo tiene un comportamiento específico de la localidad para los países tr, az y lt. Sé que tr es Turquía, pero no sé sobre los otros ...


Este aspecto es el más invariante que puede obtener sin utilizar cualquier configuración regional. Si te importa el Unicode extendido (más allá de UTF16), tendrás que buscar la solución de CodePoint (si no conoces los puntos de código no lo necesitas :))

static String toUpperCase(String s){ char[] c = s.toCharArray(); for (int i=0;i<c.length;i++){ c[i]=Character.toUpperCase(c[i]); } return String.copyValueOf(c); }