Java中的Locale解析

转载 2012年03月29日 14:18:36

在项目中经常要用到将字符串解析成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平台下的Locale

国际化: 理解Java平台上的Locale   语言和地理环境对我们的文化产生重要影响.我们同他人之间的交流以及生活中的事件都发生在语言和地理环境所产生的一个系统里.由于语言和环境的不同...

java.util.Locale

转自http://bhsc.happy.blog.163.com/blog/static/10438955220093981612329/ 自java.util.Locale 2009-04-09 ...

java.util.Locale简单了解

1:java.util.Locale的主要用途是什么?java.util.Locale主要在软件的本地化时使用。它本身没有什么功能,更多的是作为一个参数辅助其他方法完成输出的本地化。 2:java.u...
  • revo
  • revo
  • 2006-04-05 21:11
  • 12779

java.util.Locale

转自http://bhsc.happy.blog.163.com/blog/static/10438955220093981612329/自java.util.Locale 2009-04-09 20...

java的Locale类

Java国际化 我们使用java.lang.Locale来构造Java国际化的情境。 java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的...

Thread Runnable 多线程

1.         实现多线程的两种方法a)         让这个类继承java.lang.Thread,然后重写run方法b)...

java Locale介绍

定义:       public final class Locale extends Object       Locale&#...

The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法

在springmvc配置文件里面写默认的注解映射的支持的时候:The prefix "mvc" for element "mvc:annotation-driven" is not bound。 解...

Java 国际化 语言切换

Java国际化我们使用java.lang.Locale来构造Java国际化的情境。java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的操作。构...

javamail的几个测试程序!

使用Javamail发送邮件,必需的jar包(请下载javamail的源文件): mailapi.jar。定义了收发邮件所使用到的接口API;smtp.jar。包含了发送邮件使用到的类;pop3...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)