深入解析java中的locale
2018-10-12 13:51
387 查看
在项目中经常要用到将字符串解析成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就不支持。
参考其它方法,写了下面的类,做个笔记,也希望对解决类似问题的人有点帮助。
注意:
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反射机制深入学习(一)Java反射概念解析
- java 深入解析FileInputStream和FileOutputStream
- 深入解析java乱码
- Java线程知识深入解析
- 探索深入理解java虚拟机之java内存区域解析(1)
- 深入理解Java类加载器(1):Java类加载原理解析
- java ThreadLocal深入解析
- 深入解析Java的设计模式编程中的模板方法模式
- 深入java虚拟机--Class文件实例解析
- java int转String所有方式的效率对比与深入解析
- Java笔记二十二.深入解析I/O编程之包装类
- JAVA基础 (三)反射 深入解析反射机制
- 深入解析java应用程序的一般架构
- 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
- 深入解析Java中的Classloader的运行机制
- 理解java String,深入解析StringBuffer和StringBuilder的区别
- Java 集合Hashtable源码深入解析
- 深入解析JAVA细节(J2SE)
- JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
- 深入解析Java中volatile关键字的作用