深入解析java中的locale
java本身提供了3個(gè)構(gòu)造函數(shù),但是實(shí)際使用過(guò)程中,需要自己解析,比較繁瑣。
Locale(langugae)
locale(language,country)
Locale(String language, String country, String variant)
Apache 有個(gè) LocaleUtils.toLocale(String language)但是不支持最后2個(gè)字符為小寫(xiě)的,如:zh_CN支持, zh_cn就不支持。
參考其它方法,寫(xiě)了下面的類,做個(gè)筆記,也希望對(duì)解決類似問(wèn)題的人有點(diǎn)幫助。
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);
}
}
相關(guān)文章
spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例
本文主要介紹了spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08區(qū)分Java中的ArrayList和LinkedList
這篇文章主要介紹了如何區(qū)分Java中ArrayList和LinkedList,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06JVM入門(mén)之內(nèi)存結(jié)構(gòu)(堆、方法區(qū))
JVM 基本上是每家招聘公司都會(huì)問(wèn)到的問(wèn)題,它們會(huì)這么無(wú)聊問(wèn)這些不切實(shí)際的問(wèn)題嗎?很顯然不是。由 JVM 引發(fā)的故障問(wèn)題,無(wú)論在我們開(kāi)發(fā)過(guò)程中還是生產(chǎn)環(huán)境下都是非常常見(jiàn)的2021-06-06使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)
這篇文章主要介紹了使用java?-jar修改SpringBoot中application.properties的配置項(xiàng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java實(shí)現(xiàn)小程序簡(jiǎn)單五子棋
這篇文章主要介紹了利用Java實(shí)現(xiàn)小程序簡(jiǎn)單五子棋,本程序適用于java初學(xué)者鞏固類與對(duì)象、事件響應(yīng)、awt包中各種工具的相關(guān)概念以及對(duì)邏輯能力的鍛煉,下面來(lái)看具體實(shí)現(xiàn)吧2021-12-12spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題
這篇文章主要介紹了spring-boot-maven-plugin未指定版本導(dǎo)致的編譯錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Java中靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)和普通代碼塊的區(qū)別
在Java中,靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)、普通代碼塊的執(zhí)行順序是一個(gè)筆試的考點(diǎn),通過(guò)這篇文章希望大家能徹底了解它們之間的執(zhí)行順序,需要的朋友可以參考下2023-05-05使用自定義參數(shù)解析器同一個(gè)參數(shù)支持多種Content-Type
這篇文章主要介紹了使用自定義參數(shù)解析器同一個(gè)參數(shù)支持多種Content-Type的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08