深刻解析java中的locale。本站提示廣大學習愛好者:(深刻解析java中的locale)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析java中的locale正文
在項目中常常要用到將字符串解析成Locale,然則沒有一個比擬好用的類。
java自己供給了3個結構函數,然則現實應用進程中,須要本身解析,比擬繁瑣。
Locale(langugae)
locale(language,country)
Locale(String language, String country, String variant)
Apache 有個 LocaleUtils.toLocale(String language)然則不支撐最初2個字符為小寫的,如:zh_CN支撐, zh_cn就不支撐。
參考其它辦法,寫了上面的類,做個筆記,也願望對處理相似成績的人有點贊助。
import java.util.Locale;
public class LocaleUtil
{
private final static Locale DEFAULT_LOCALE = Locale.ENGLISH;
public final static String IETF_SEPARATOR = "-";
public final static String SEPARATOR = "_";
public final static String EMPTY_STRING = "";
public static Locale toLocale( String language )
{
if( !StringUtil.isNullOrEmpty( language ) )
{
return langToLocale( language, SEPARATOR );
}
return DEFAULT_LOCALE;
}
public static Locale langToLocale( String lang , String separator )
{
if( StringUtil.isNullOrEmpty( lang ) )
{
return DEFAULT_LOCALE;
}
String language = EMPTY_STRING;
String country = EMPTY_STRING;
String variant = EMPTY_STRING;
int i1 = lang.indexOf( separator );
if ( i1 < 0 )
{
language = lang;
} else
{
language = lang.substring(0, i1);
++i1;
int i2 = lang.indexOf( separator, i1);
if (i2 < 0)
{
country = lang.substring(i1);
} else
{
country = lang.substring(i1, i2);
variant = lang.substring(i2+1);
}
}
if(language.length() == 2)
{
language = language.toLowerCase();
}else
{
language = EMPTY_STRING;
}
if(country.length() == 2)
{
country = country.toUpperCase();
}else
{
country = EMPTY_STRING;
}
if( (variant.length() > 0) &&
((language.length() == 2) ||(country.length() == 2)) )
{
variant = variant.toUpperCase();
}else
{
variant = EMPTY_STRING;
}
return new Locale(language, country, variant );
}
}
留意:
public class StringUtil
{
public static boolean isNullOrEmpty(String target) {
return target == null || "".equals(target);
}
}