在项目中经常要用到将字符串解析成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`是一个非常重要的类,它用于表示特定的语言、国家和地区设置。`Locale`对象被广泛应用于格式化日期、时间、数字、货币,以及处理文本的拼写和排序规则。深入理解`Locale`对于开发具有国际...
`LocaleResolver`是Spring MVC用来解析和设置`Locale`的接口。最常用的实现是`CookieLocaleResolver`和`SessionLocaleResolver`。`CookieLocaleResolver`将用户的选择保存在cookie中,而`SessionLocaleResolver`则...
本文将详细介绍六种在Java中解析和读取Properties文件的方法。 1. **使用Properties类** Java提供内置的`java.util.Properties`类来处理Properties文件。首先,我们需要加载文件内容,然后加载到Properties对象中...
10. **XML处理**:DOM(Document Object Model)和SAX(Simple API for XML)是两种常见的XML解析方式,JAXB(Java Architecture for XML Binding)用于将XML数据绑定到Java对象。 这份中文完整版的Java API文档...
7. **国际化与本地化**:`java.util.Locale`和`java.text`包支持多种语言环境,提供日期、时间、数字和货币格式的处理。 8. **XML处理**:`javax.xml`包提供了处理XML文档的API,如`DOM`、`SAX`解析器和`...
10. **国际化和本地化**:`java.text`和`java.util.Locale`类支持多语言环境下的软件开发,使程序能适应不同地区的文化和语言习惯。 这份中文手册不仅介绍了上述各个部分的主要类和接口,还可能包括了示例代码、...
7. **国际化与本地化**:`java.text`和`java.util.Locale`支持国际化和本地化功能,允许程序根据用户的地区设置显示相应的内容。 8. **日期与时间**:`java.util.Date`和`java.util.Calendar`是处理日期和时间的...
7. **国际化**:`java.text`和`java.util.locale`包提供了支持多种语言和文化的工具。 8. **XML处理**:`javax.xml`包包含了处理XML文档的API,如DOM、SAX和StAX解析器。 9. **Java集合框架**:包括List、Set、Map...
【智能识别收货地址Java】技术解析 在Java编程中,智能识别收货地址通常涉及到网络请求、数据编码以及安全签名等技术。给定的代码片段展示了如何利用Java实现一个智能识别服务的调用过程,其中包括了计算授权认证...
8. **国际化**:`java.text`和`java.util.Locale`类支持多语言环境下的文本处理和日期时间格式化。 9. **XML处理**:Java 6开始支持DOM和SAX解析XML,通过`javax.xml.parsers`和`org.w3c.dom`等包进行XML文档的读取...
8. **XML 处理**:Java 6.0 支持 XML 解析和生成,如 `javax.xml.parsers` 和 `javax.xml.transform` 包,分别用于解析 XML 文档和转换 XML 数据。 9. **JDBC 驱动**:Java 6.0 内置了对多种数据库的 JDBC 驱动,如...
在Java API中,主要包含以下几个关键部分: 1. **基础类库**:这是Java API的基础,包括集合框架(如ArrayList、HashMap等)、IO流、线程管理、异常处理等。这些类库使得开发者能够处理输入输出、数据存储、多线程...
Java提供了强大的国际化支持,允许开发者根据用户的地区设置来格式化和解析日期和时间。本文将详细介绍如何在Java中实现国际化的日期和时间格式,包括国际化的基本概念、Java中的相关类和方法、以及实际应用案例。 ...
例如,java.text.SimpleDateFormat类用于日期和时间的格式化与解析,java.text.NumberFormat类用于数字和货币的格式化。这些类允许程序员指定Locale来获取相应地区的格式。 字体的国际化在Java中同样重要,特别是当...
Java API中的`java.lang.Thread`和`java.util.concurrent`包提供了多线程支持。开发者可以通过继承`Thread`类或者实现`Runnable`接口来创建并管理线程,`java.util.concurrent`包则提供了高级并发工具,如`...
首先,Java中的国际化主要依赖于`java.util.Locale`类,它代表了特定的语言环境,包括语言、国家和地区。例如,`Locale.CHINA`表示简体中文环境,`Locale.US`则代表美国英语环境。开发者可以通过`ResourceBundle`类...
10. **国际化**:`java.text`和`java.util.locale`包支持多语言环境下的应用开发,提供日期、时间、数字的格式化和本地化处理。 11. **安全**:`java.security`包提供了安全管理框架,包括认证、加密、权限管理等。...
在Java编程中,时间操作是不可或缺的一部分,尤其是在处理与日期和时间相关的业务逻辑时。本文将详细介绍Java中处理时间的常见方法,分为四个主要部分:获取当前时间、格式化时间、设置时间以及定时任务。 一、获取...
8. **国际化与本地化**:`java.text`和`java.util.Locale`支持全球化应用程序,可以处理不同的日期格式、货币符号和语言。 9. **数据库连接**:JDBC(Java Database Connectivity)API在`java.sql`包中,提供了一套...
在Java 1.6版本中,API包含了众多类库和接口,这些是构建Java应用程序的基础。以下是一些关键的知识点: 1. **基础类库**:包括`java.lang`、`java.io`、`java.util`等包,提供基本数据类型、异常处理、输入/输出、...