En proyectos, a menudo necesitamos analizar cadenas en configuraciones regionales, pero no existe una clase fácil de usar.
El propio Java proporciona 3 constructores, pero en el uso real es necesario analizarlos usted mismo, lo cual es relativamente engorroso.
Localidad (idiomas)
localidad (idioma, país)
Configuración regional (idioma de cadena, país de cadena, variante de cadena)
Apache tiene LocaleUtils.toLocale (idioma de cadena) pero no admite que los dos últimos caracteres estén en minúsculas. Por ejemplo: zh_CN lo admite, pero zh_cn no.
En referencia a otros métodos, escribí la siguiente clase y tomé notas. Espero que sea útil para las personas que resuelven problemas similares.
Copie el código de código de la siguiente manera:
importar java.util.Locale;
clase pública LocaleUtil
{
Configuración regional estática final privada DEFAULT_LOCALE = Configuración regional.ENGLISH;
Cadena estática final pública IETF_SEPARATOR = "-";
Cadena estática final pública SEPARADOR = "_";
Cadena estática final pública EMPTY_STRING = "";
Configuración regional estática pública a configuración regional (lenguaje de cadena)
{
if(!StringUtil.isNullOrEmpty( idioma ) )
{
devolver idiomaToLocale( idioma, SEPARADOR );
}
devolver DEFAULT_LOCALE;
}
Configuración regional estática pública langToLocale (idioma de cadena, separador de cadena)
{
si (StringUtil.isNullOrEmpty (idioma))
{
devolver DEFAULT_LOCALE;
}
Lenguaje de cadenas = EMPTY_STRING;
País de cadena = EMPTY_STRING;
Variante de cadena = EMPTY_STRING;
int i1 = idioma.indexOf(separador);
si (i1 < 0)
{
idioma = idioma;
} demás
{
idioma = idioma.substring(0, i1);
++i1;
int i2 = lang.indexOf(separador, i1);
si (i2 < 0)
{
país = idioma.substring(i1);
} demás
{
país = idioma.substring(i1, i2);
variante = idioma.substring(i2+1);
}
}
si(idioma.longitud() == 2)
{
idioma = idioma.toLowerCase();
}demás
{
idioma = EMPTY_STRING;
}
si(país.longitud() == 2)
{
país = país.toUpperCase();
}demás
{
país = EMPTY_STRING;
}
if( (variante.longitud() > 0) &&
((idioma.longitud() == 2) ||(país.longitud() == 2)) )
{
variante = variante.toUpperCase();
}demás
{
variante = EMPTY_STRING;
}
devolver nueva configuración regional (idioma, país, variante);
}
}
Aviso:
Copie el código de código de la siguiente manera:
clase pública StringUtil
{
booleano estático público isNullOrEmpty (objetivo de cadena) {
destino de retorno == nulo || "".equals(objetivo);
}
}