欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深入解析java中的locale

程序员文章站 2023-12-17 13:35:34
在项目中经常要用到将字符串解析成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);
    }
}

上一篇:

下一篇: