深入解析java中的locale
程序员文章站
2023-12-20 09:00:58
在项目中经常要用到将字符串解析成locale,但是没有一个比较好用的类。java本身提供了3个构造函数,但是实际使用过程中,需要自己解析,比较繁琐。 locale(lang...
在项目中经常要用到将字符串解析成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);
}
}
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);
}
}