В проектах нам часто приходится анализировать строки в Locales, но простого в использовании класса не существует.
Сама Java предоставляет 3 конструктора, но при реальном использовании вам придется анализировать их самостоятельно, что довольно громоздко.
Локаль (языки)
локаль (язык, страна)
Локаль (строковый язык, строковая страна, строковый вариант)
У Apache есть LocaleUtils.toLocale (язык строк), но он не поддерживает строчные буквы последних двух символов. Например: zh_CN поддерживает это, а zh_cn — нет.
Что касается других методов, я написал следующий класс и сделал заметки. Надеюсь, он будет полезен людям, решающим подобные проблемы.
Скопируйте код кода следующим образом:
импортировать java.util.Locale;
общедоступный класс LocaleUtil
{
частный окончательный статический локаль DEFAULT_LOCALE = Locale.ENGLISH;
публичная окончательная статическая строка IETF_SEPARATOR = "-";
публичная окончательная статическая строка SEPARATOR = "_";
публичная окончательная статическая строка EMPTY_STRING = "";
общедоступная статическая локаль toLocale (строковый язык)
{
если( !StringUtil.isNullOrEmpty(язык))
{
вернуть langToLocale(язык, РАЗДЕЛИТЕЛЬ);
}
вернуть DEFAULT_LOCALE;
}
public static Locale langToLocale (язык строки, разделитель строк)
{
если( StringUtil.isNullOrEmpty(lang))
{
вернуть DEFAULT_LOCALE;
}
Строковый язык = EMPTY_STRING;
Строка страны = EMPTY_STRING;
Строковый вариант = EMPTY_STRING;
int i1 = lang.indexOf(разделитель);
если ( я1 < 0 )
{
язык = язык;
} еще
{
язык = lang.substring(0, i1);
++я1;
int i2 = lang.indexOf(разделитель, i1);
если (i2 <0)
{
страна = lang.substring(i1);
} еще
{
страна = lang.substring(i1, i2);
вариант = lang.substring(i2+1);
}
}
если (language.length() == 2)
{
язык = язык.toLowerCase();
}еще
{
язык = EMPTY_STRING;
}
если (country.length() == 2)
{
страна = страна.toUpperCase();
}еще
{
страна = EMPTY_STRING;
}
if( (variant.length() > 0) &&
((language.length() == 2) ||(country.length() == 2)) )
{
вариант = вариант.toUpperCase();
}еще
{
вариант = EMPTY_STRING;
}
вернуть новый локаль (язык, страна, вариант);
}
}
Уведомление:
Скопируйте код кода следующим образом:
открытый класс StringUtil
{
public static boolean isNullOrEmpty(String target) {
вернуть цель == ноль "".equals(цель);
}
}