`
dowhathowtodo
  • 浏览: 799015 次
文章分类
社区版块
存档分类
最新评论

Java中的Locale解析

 
阅读更多

在项目中经常要用到将字符串解析成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`是一个非常重要的类,它用于表示特定的语言、国家和地区设置。`Locale`对象被广泛应用于格式化日期、时间、数字、货币,以及处理文本的拼写和排序规则。深入理解`Locale`对于开发具有国际...

    Spring MVC Locale 的使用 中文 英文 等语言 切换

    `LocaleResolver`是Spring MVC用来解析和设置`Locale`的接口。最常用的实现是`CookieLocaleResolver`和`SessionLocaleResolver`。`CookieLocaleResolver`将用户的选择保存在cookie中,而`SessionLocaleResolver`则...

    java解析读取properties文件的6中方法总结

    本文将详细介绍六种在Java中解析和读取Properties文件的方法。 1. **使用Properties类** Java提供内置的`java.util.Properties`类来处理Properties文件。首先,我们需要加载文件内容,然后加载到Properties对象中...

    JAVA常用API文档 中文完整版.zip

    10. **XML处理**:DOM(Document Object Model)和SAX(Simple API for XML)是两种常见的XML解析方式,JAXB(Java Architecture for XML Binding)用于将XML数据绑定到Java对象。 这份中文完整版的Java API文档...

    java api1.6中文文档chm

    7. **国际化与本地化**:`java.util.Locale`和`java.text`包支持多种语言环境,提供日期、时间、数字和货币格式的处理。 8. **XML处理**:`javax.xml`包提供了处理XML文档的API,如`DOM`、`SAX`解析器和`...

    Java类库中文手册

    10. **国际化和本地化**:`java.text`和`java.util.Locale`类支持多语言环境下的软件开发,使程序能适应不同地区的文化和语言习惯。 这份中文手册不仅介绍了上述各个部分的主要类和接口,还可能包括了示例代码、...

    Java6 API 中文

    7. **国际化与本地化**:`java.text`和`java.util.Locale`支持国际化和本地化功能,允许程序根据用户的地区设置显示相应的内容。 8. **日期与时间**:`java.util.Date`和`java.util.Calendar`是处理日期和时间的...

    JAVA API官方文档 中文版

    7. **国际化**:`java.text`和`java.util.locale`包提供了支持多种语言和文化的工具。 8. **XML处理**:`javax.xml`包包含了处理XML文档的API,如DOM、SAX和StAX解析器。 9. **Java集合框架**:包括List、Set、Map...

    智能识别收货地址Java.pdf

    【智能识别收货地址Java】技术解析 在Java编程中,智能识别收货地址通常涉及到网络请求、数据编码以及安全签名等技术。给定的代码片段展示了如何利用Java实现一个智能识别服务的调用过程,其中包括了计算授权认证...

    Java6中文API

    8. **国际化**:`java.text`和`java.util.Locale`类支持多语言环境下的文本处理和日期时间格式化。 9. **XML处理**:Java 6开始支持DOM和SAX解析XML,通过`javax.xml.parsers`和`org.w3c.dom`等包进行XML文档的读取...

    java6.0 中文API

    8. **XML 处理**:Java 6.0 支持 XML 解析和生成,如 `javax.xml.parsers` 和 `javax.xml.transform` 包,分别用于解析 XML 文档和转换 XML 数据。 9. **JDBC 驱动**:Java 6.0 内置了对多种数据库的 JDBC 驱动,如...

    Java API 中文版 Java_Help_CHS.chm

    在Java API中,主要包含以下几个关键部分: 1. **基础类库**:这是Java API的基础,包括集合框架(如ArrayList、HashMap等)、IO流、线程管理、异常处理等。这些类库使得开发者能够处理输入输出、数据存储、多线程...

    Java中的国际化日期和时间格式实现:策略与实践

    Java提供了强大的国际化支持,允许开发者根据用户的地区设置来格式化和解析日期和时间。本文将详细介绍如何在Java中实现国际化的日期和时间格式,包括国际化的基本概念、Java中的相关类和方法、以及实际应用案例。 ...

    java国际化官方指南

    例如,java.text.SimpleDateFormat类用于日期和时间的格式化与解析,java.text.NumberFormat类用于数字和货币的格式化。这些类允许程序员指定Locale来获取相应地区的格式。 字体的国际化在Java中同样重要,特别是当...

    Java api html完整中文版

    Java API中的`java.lang.Thread`和`java.util.concurrent`包提供了多线程支持。开发者可以通过继承`Thread`类或者实现`Runnable`接口来创建并管理线程,`java.util.concurrent`包则提供了高级并发工具,如`...

    java国际化&时间处理

    首先,Java中的国际化主要依赖于`java.util.Locale`类,它代表了特定的语言环境,包括语言、国家和地区。例如,`Locale.CHINA`表示简体中文环境,`Locale.US`则代表美国英语环境。开发者可以通过`ResourceBundle`类...

    java6.0 api 中文文档chm

    10. **国际化**:`java.text`和`java.util.locale`包支持多语言环境下的应用开发,提供日期、时间、数字的格式化和本地化处理。 11. **安全**:`java.security`包提供了安全管理框架,包括认证、加密、权限管理等。...

    Java中的时间操作,都是工作中用的着的

    在Java编程中,时间操作是不可或缺的一部分,尤其是在处理与日期和时间相关的业务逻辑时。本文将详细介绍Java中处理时间的常见方法,分为四个主要部分:获取当前时间、格式化时间、设置时间以及定时任务。 一、获取...

    java1.6API中文帮助文档

    8. **国际化与本地化**:`java.text`和`java.util.Locale`支持全球化应用程序,可以处理不同的日期格式、货币符号和语言。 9. **数据库连接**:JDBC(Java Database Connectivity)API在`java.sql`包中,提供了一套...

    java api 1.6 中文手册.rar

    在Java 1.6版本中,API包含了众多类库和接口,这些是构建Java应用程序的基础。以下是一些关键的知识点: 1. **基础类库**:包括`java.lang`、`java.io`、`java.util`等包,提供基本数据类型、异常处理、输入/输出、...

Global site tag (gtag.js) - Google Analytics