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